Klassenname anhand von Objekt ermitteln



  • Hallo!

    Gibt es eine Möglichkeit, den Klassennamen von einem Objekt zu ermitteln, wobei die Klasse keinen getName() methode (oder ähnliches) anbietet?

    also ich mein sowas:

    MyInterface ix = new MyClass1();
    
    printf(getClassNameFromObject(ix));
    

    danke,



  • ein typeid - objekt hat eine Methode getname() oder so ähnlich ... ist allerdings ein Compiler/Linker spezifischer Name der nicht unbedingt dem eigentlichen Klassennamen gleichkommt.

    Dü konntest auch eine Basisklasse definieren, der du diese Funktionalität beibringst (so ähnlich wies die VCL macht) ... davon müsstest du dann alle Klassen ableiten!



  • Nicht direkt, das ist doch das tolle an C++ dass man soviel zur Compilezeit rausschmeissen kann. Trotzdem geht es mit RTTI -> operator typeid.



  • Wenn ich z.b. folgendes mache, dann bekomme ich die Interfaceklasse als ergebnis:

    MyInterface* ixxx = new MyClass();
    
    typeid(ixxx).name();  // gibt interfaceklasse zurück
    typeid(*ixxx).name();  // ruft exception hervor. laut msdn sollte es aber MyClass ausgeben.
    


  • pixsta schrieb:

    Wenn ich z.b. folgendes mache, dann bekomme ich die Interfaceklasse als ergebnis:

    MyInterface* ixxx = new MyClass();
    
    typeid(ixxx).name();  // gibt interfaceklasse zurück
    typeid(*ixxx).name();  // ruft exception hervor. laut msdn sollte es aber MyClass ausgeben.
    

    Dann ist MyClass wohl nicht polymorph, sprich weder deine Basisklasse noch MyClass besitzen irgendwelche virtuellen Methoden.



  • HumeSikkins schrieb:

    pixsta schrieb:

    Wenn ich z.b. folgendes mache, dann bekomme ich die Interfaceklasse als ergebnis:

    Dann ist MyClass wohl nicht polymorph, sprich weder deine Basisklasse noch MyClass besitzen irgendwelche virtuellen Methoden.

    Alternativ könnte zumindest beim VC++ 6 auch RTTI ausgeschaltet sein (das ist der Default 🙄 ).
    Sobald du typeid benutzt, muss auch immer ein #include <typeinfo> dabei sein. Ansonsten bekommst du undefiniertes Verhalten.


Anmelden zum Antworten