RTTI, was kann man alles damit noch machen?
-
Hab mal wieder im Stroustrup geblättert und bin beim Thema RTTI (§15.4.4) hängen geblieben. Aber ganz ehrlich finde ich typeid irgendwie nutzlos.
#include <iostream> #include <typeinfo> namespace Test{ class Layout { }; } int main( int argc, char ** argv ) { Test::Layout l; std::cout << typeid(l).name(); }
Das gibt mir netterweise "class Test::Layout" aus, aber was bringt mir das wirklich?
Zum logging für spätere Fehlersuche kann das nützlich sein. Aber mehr fällt mir da im Moment nicht ein.
Weiß jemand, ob man sich z.B. die Attribute einer Klasse anzeigen lassen kann?
Was mir spontan einfallen würde, ist sowas wie Reflaction unter Java. Also das ich eine Objekt anhand des Klassennamens (also als String vorliegend!) instanzieren könnte. Aber das ist ja in C++ nicht möglich.
dynamic_cast<> will ich jetzt anstatt dem C-Cast einsetzen, obwohl ich in meinem Code so gut wie nicht casten muß.
Wer mehr Infos, Links oder Literatur bzgl. RTTI in C++ hat, immer her damit.
-
Artchi schrieb:
Weiß jemand, ob man sich z.B. die Attribute einer Klasse anzeigen lassen kann?
garnicht. c++ unterstutzt reflection leider nicht.
dynamic_cast<> will ich jetzt anstatt dem C-Cast einsetzen, obwohl ich in meinem Code so gut wie nicht casten muß.
dynamic_cast ist fuer downcasts gedacht, wo du nicht weisst, ob er wirklich passt. dito bei cross casts
Wer mehr Infos, Links oder Literatur bzgl. RTTI in C++ hat, immer her damit.
Links und Infos habe ich jetzt keine bei der hand, aber nur soviel: typeid bringt sich zB dann, wenn du eine Type map erstellen willst, also Typen in eine map oder aehnliches speichern.
RTTI ist in C++ aber nicht sehr ausgepraegt und man geht hier oft den templates weg und loest moeglich alles zur compiletime auf (auch polymorphie)