Klassenname während der laufzeit Ermitteln?
-
Möglichkeit zu ermittlung der Klasse wärhden der laufzeit?
Sowas in der Art:
class Basis{ . . . }; class A : public Basis{ . . . }; class B : public Basis{ . . . }; Basis *p[2]; p[0]= new A(); p[1]= new B(); p[0]->getClass() == "A" //<-- Sowas in p[1]->getClass() == "B" //<-- der Art
-
auf die Art geht es nur, wenn du die methode selbst schreibst

du kannst noch mit typeid arbeiten. da kriegst du zwar den namen einer klasse mit
typeid(p[0]).name()allerdings ist der rückgabewert durch den standard nicht weiter definiert. du musst also nicht unbedingt "A" rauskriegen, sondern kannst auch zb "ABCDEZeichensalat__Class__A" bekommen.
was aber geht, ist die typeids vergleichen:
//wichtig, es dürfen keine referenzen oder zeiger der objekte genommen werden //also vorher immer dereferenzieren if(typeid(*(p[0]))==typeid(A)){/*ja, p[0] ist ein A*/} //geht auch mit den namen //wie sinnvoll das ist? nicht sehr ;) if(typeid(*(p[0])).name()==typeid(A).name()){ //den rückgabewert von typeid kann man auch speichern std::type_info info=typeid(*(p[0]));wenn du nur wissen willst, ob es eine Klasse A ist, um dann zu casten kannst du einen dynamic_cast verwenden:
A* obj = dynamic_cast<A*>(p[0]); if(obj!=NULL){/*casten hat geklappt, dies ist ein A*/}für all diese möglichkeiten musst du aber bei deinem compiler die RTTI anschalten, sonst wird nur ne exception geworfen

zuletzt ist noch zu sagen, dass all diese möglichkeiten nicht unbedingt guter stil sind, man sollte sich also 10 mal überlegen, ob man das wirklich braucht

-
hört sich schonmal gut an! Wenn ich von meinem Code desigen ausgehe, ist es immer eindeutig wo welche klasesnTypen vorhanden sind.. aber so als sicherheits abfarage und evtl. zu test/debug zwecken wäre das doch mal sinnvoll!
-
BorisDieKlinge schrieb:
hört sich schonmal gut an! Wenn ich von meinem Code desigen ausgehe, ist es immer eindeutig wo welche klasesnTypen vorhanden sind.. aber so als sicherheits abfarage und evtl. zu test/debug zwecken wäre das doch mal sinnvoll!
für sowas gibt es debugger
-
wenn es dir nicht reicht such nach RTTI (Run-Time-Type-ID)
-
Wobei das I nicht für ID, sondern Information steht.