Objekttyp während der Laufzeit ermitteln?
-
Hi,
mit typeid() kann ich einen Objekttyp zur Compilezeit ermitteln, was aber dazu führt, dass ich immer nur den aktuellen Objekttypen erhalte und nicht eventuell tatsächlich benutzte, von diesem Typ abgeleitete Objekte (weil das zur Compilezeit einfach noch nicht bekannt ist).
Wie mache ich das zur Laufzeit, um den tatsächlichen Typen zu ermitteln? Google führt mich nur zu irgend welchen dämlichen .NET-GetType()-Methoden, die mir nix nutzen, da ich keine .NET Klassenbibliotheken verwende.
Wie geht es dann?
-
Was willst du erreichen?
-
Debug-Logs mit den tatsächlichen Objektnamen
-
Falls dir Performance irgendwie wichtig ist, rate ich dir doch zu etwas Anderem als RTTI. (z.B. einer virtuellen Methode)
Allerdings: typeid funktioniert hier problemlos. Hast du vielleicht keine virtuelle Methode? (Der Destruktor sollte ja wohl eh virtual sein.)class A { public: virtual ~A() {} }; class B : public A { }; int main() { B b; A* p = &b; std::cout << typeid(*p).name() << '\n'; }
-
Wie soll das funktionieren?
Laut http://msdn.microsoft.com/en-us/library/kwd9abya(v=vs.80).aspx wird da der Typ zur Compilezeit ermittelt, nicht der tatsächliche Typ zur Laufzeit. Und meine Ergebnisse hier sehen auch dementsprechend aus...
-
http://en.wikibooks.org/wiki/C%2B%2B_Programming/RTTI#typeid
Und noch ein Vorteil von eigenen Funktionen: Die Ausgabe sieht überall gleich aus. (GCCs Ausgabe z.B. ist nicht gerade hübsch.)
-
Womp! schrieb:
Wie soll das funktionieren?
Laut http://msdn.microsoft.com/en-us/library/kwd9abya(v=vs.80).aspx wird da der Typ zur Compilezeit ermittelt, nicht der tatsächliche Typ zur Laufzeit. Und meine Ergebnisse hier sehen auch dementsprechend aus...
Das unter deinem Link ist doch .NET mit C++, da dieses C++/CLI.
Schau mal hier: http://www.cplusplus.com/reference/std/typeinfo/type_info/
Da hast du eine richtige C++ Referenz
-
typeid wird zur Laufzeit ausgewertet und gibt dir damit den konkreten Typ. Die Ausgabe ist allerdings implementation-defined.