Noch ne frage zum casten
-
Habe eine Klassen struktur aus Basis und 3 abgeleitet klassen A,B,C
diese speicher ich in nem gemeinsame array, später beim auslesen cast ich den typ per static_cast bzw. dynamic_cast!!
Gibt es noch nen cast operator der mit nen BOOL zurück gibt ob es der A,B, C ist?
Bsp;
Basis *p = new A(); Basis *p = new B(); Basis *p = new C(); . . . array.Add(p); if((array.ElementAt(x) TYPE A)== TRUE) .....
wobei TYPE A nur erfunden ist , aber ich mich frage ob es sowas tatsächlich gibt... hoffe ihr wisst was ich meine
-
BorisDieKlinge schrieb:
Gibt es noch nen cast operator der mit nen BOOL zurück gibt ob es der A,B, C ist?
Vergleich doch einfach den Rückgabewert von dynamic_cast mit 0, dann hast du deinen bool.
-
wobei dir
dynamic_cast<A*>(x)!=0
nur sagt, ob x auf ein A oder eine von A abegeleitete Klasse zeigt.
-
BorisDieKlinge schrieb:
Habe eine Klassen struktur aus Basis und 3 abgeleitet klassen A,B,C
diese speicher ich in nem gemeinsame array, später beim auslesen cast ich den typ per static_cast bzw. dynamic_cast!!
Warum nur? Entweder der genaue Typ ist relevant, dann ist eine heterogene Liste nicht angebracht, oder er ist es nicht, dann macht auch die heterogene Liste sinn.
Ein Test-Type-and-Switch-Ansatz ist im Allgemeinen wirklich keine gute Idee.
wobei dir dynamic_cast<A*>(x)!=0 nur sagt, ob x auf ein A oder eine von A abegeleitete Klasse zeigt.
Wenn es wirklich auf den genauen Typ ankommt, hilft ein Vergleich des Ergebnisses von typeid mit dem passenden Typeinfo-Objekt.
typeid(*ptr) == typeid(ClassType);