Klassentyp herausbekommen
-
Angenommen ich hab eine
class A {};Und mache dann
A *p = new A();Irgendwann später will ich herausfinden was für ein typ hinter p steckt, wie lautet die Funktion dafür? Soll sowas werden:
if(gibmirTypvon(p) == A) ;
-
if(dynamic_cast<A*>(p)) { }
-
Hallo,
Das funktioniert aber nur wenn RTTI eingeschalten ist und class A mindestens eine virtuelle Funktion hat.
Ciao
-
Was ist rtti? und gibts dann keine andere lösung?
-
RTTI = Runtime Type Information
Vielleicht sagst du uns mal was du vor hast. Vielleicht läßt sich das ja auch noch anders lösen.
-
...Run Time Type Informaion...
Andere Möglichkeit ist durch eine virtuelle Funktion, die in Abhängigkeit von der Klasse eine ID zurückliefert. Das hilft jedoch nur um den Typ zu bestimmten, wenn man die Schnittstelle wechseln möchte, hilft nur der Cast und der ist wie schon geschrieben nur dann sichern wenn die
(R)un(T)ime(T)ype(I)nfomation beim Übersetzen aktiviert ist.
-
Naja das muss aber nicht immer funktionieren mit dem dynamic_cast da wenn eine Klasse B von A erbt würde der dynamic_cast auch B zu A casten.
-
FireFlow schrieb:
Naja das muss aber nicht immer funktionieren mit dem dynamic_cast da wenn eine Klasse B von A erbt würde der dynamic_cast auch B zu A casten.
Wenn man auf den genauen Typ testen will, nimmt man einfach typeid.