type_info::name()



  • Hallo,

    ich schreibe gerade eine Klasse die mit type_infos rumhantiert.
    Ist es vom Standard garantiert, dass die Funktion name() immer den
    selben const char* pro Klasse zurückgibt (also die selbe Adresse)?
    Es geht um effizienten Vergleich.
    Ich würde ja type_infos direkt vergleichen,
    aber meinen Geschindigkeitsmessungen nach sind operator==
    und before() mir unverständlicherweise ziemlich langsam



  • Ist es vom Standard garantiert, dass die Funktion name() immer den
    selben const char* pro Klasse zurückgibt (also die selbe Adresse)?

    Nein.

    Wenn du keine Ordnung sondern einfach nur ein == brauchst, kannst du
    einfach die Adressen der type_info-Objekte vergleichen.



  • du könntes per #if für compilier und libary versionen wo du dir sicher bist eine laufzeit "effiziente" version bauen und für den rest die standard



  • Wenn du keine Ordnung sondern einfach nur ein == brauchst, kannst du
    einfach die Adressen der type_info-Objekte vergleichen.

    Damit mir das helfen würde, müßte typeid aber für jede Klasse immer dasselbe Objekt rausgeben und das tut es leider nicht

    du könntes per #if für compilier und libary versionen wo du dir sicher bist eine laufzeit "effiziente" version bauen und für den rest die standard

    so werd ich es vielleicht machen 🙂
    allerdings hab ich mittlerweile was an der Implementierung geändert, so daß der Vergleich auch nicht mehr so eine große Rolle spielt



  • Was hast Du denn vor ?
    VLlt. gibts ja auch einen Weg ohne type_id ?



  • Was hast Du denn vor ?

    Ich schreib eine Template-Klasse für DoubleDispatching ("doppelt virtuelle Funktion")



  • Oha...

    Da kann ich nix zu sagen. Muss erst mal schauen was das ist O🤡



  • Kurz gesagt gehts darum eine Funktion zur Verfügung zu stellen mit zwei (gleichen oder unterschiedlichen) Basistypen als Parametern, die dann abhängig von der implementierenden Klasse beider(das ist wesentlich) Objekte an die "richtige" Funktion weiterleitet.



  • wenn es schön wird, postest du dann den code - oder ist es geheim?

    Hab mir sowas auch schon mal überlegt - war aber dann nicht schön, sondern nur böse hacks 😞 Deshalb würds mich interessieren, wie man das schön machen kann



  • naja, besonders schön ist der Code nicht unbedingt, weil ich bei sowas immer dazu neige, krampfhaft zu optimieren, damits es möglichst schnell wird 😃

    Aber wenn ich fertig bin dann kann ich es mal posten


Log in to reply