Frage zu typeid/std::type_index



  • Hi,
    ich fasse mich kurz:

    Wenn ich eine Klasse in mehreren Übersetzungseinheiten (2 dynamische Bibliotheken, 1 ausführbare Datei) nutze dann muss ich wohl damit rechnen dass der std::type_index in jeder Übersetzungseinheit unterschiedlich sein könnte?
    Also dass ich nicht annehmen darf dass

    DLL::getTypeIndexOfA() == EXE::getTypeIndexOfA()
    

    ?
    Falls das stimmt, weiß jemand wie das bei GCC/MSVC/Clang aussieht?

    Danke & Grüße,
    Ethon



  • Richtig, der Standard gibt diesbezueglich keine Garantien. Er garantiert nicht einmal, dass der TypeIndex bei jeder Ausfuehrung der selbe ist.

    Solange du die selbe Compilerversion verwendest, sollte das allerdings klappen.



  • Ok, danke sehr.
    Im Prinzip könnte ich doch einfach typeid(Foo).name() verwenden? Das ist doch immer der gemangelte Name, nur habe ich in Erinnerung dass es damit ein Problem gab?



  • Ethon schrieb:

    Ok, danke sehr.
    Im Prinzip könnte ich doch einfach typeid(Foo).name() verwenden? Das ist doch immer der gemangelte Name, nur habe ich in Erinnerung dass es damit ein Problem gab?

    ja weil auch das "Format" des "name mangling" im standard nicht definiert ist.
    Jeder compiler implementiert hier seine eigene Version.

    Solange die gleiche Compiler Version verwendet wird, gibt es da auch kein Problem.

    Hier mal ein paar beispiele wie es die verschiedenen Compiler das name mangling implementieren (das Format):
    https://en.wikipedia.org/wiki/Name_mangling#Name_mangling_in_C.2B.2B


Log in to reply