RTTI vermeiden
-
Hallo,
ich habe eine virtuelle Basisklasse B und zwei davon abgeleitete D1 und D2. Jetzt will ich entscheiden, ob ein Objekt B ein D1 oder ein D2 ist. Das ginge natürlich mit typeid (RTTI), aber die soll man ja vermeiden.
Wie löse ich das am besten? Eine virtual = 0-Funktion in B einbauen und sie in D1 und D2 verschieden überladen?
-
Du musst das nicht entscheiden, sondern einfach machen lassen. Der Weg dazu sind virtuelle Funktionen, ja.
-
Aber nicht auf die Idee kommen, RTTI mit
virtual
nachzubauen.virtual bool BinIchKlasseD1() const; // Nein!
Lieber gleich die benötigte Funktionalität polymorph implementieren, sodass auf User-Seite gar nie eine Fallunterscheidung auftritt.
-
Desweiteren muss die Methode von B nicht unbedingt pure virtual ( = 0 ) sein.
solange die Methode virtuell ist, wird automatisch bei einem B* der auf ein D1 oder D2 zeigt die jeweilige Methode von D1 oder D2 aufgerufen
-
Nexus schrieb:
Aber nicht auf die Idee kommen, RTTI mit
virtual
nachzubauen.virtual bool BinIchKlasseD1() const; // Nein!
Lieber gleich die benötigte Funktionalität polymorph implementieren, sodass auf User-Seite gar nie eine Fallunterscheidung auftritt.
Oh, OK. Danke für die Warnung.-
-
DrakoXP schrieb:
Desweiteren muss die Methode von B nicht unbedingt pure virtual ( = 0 ) sein.
Wenn in
B
jedoch keine sinnvolle Implementierung möglich ist, schon.
-
hmmmmmmmmmm schrieb:
Hallo,
ich habe eine virtuelle Basisklasse B und zwei davon abgeleitete D1 und D2. Jetzt will ich entscheiden, ob ein Objekt B ein D1 oder ein D2 ist. Das ginge natürlich mit typeid (RTTI), aber die soll man ja vermeiden.
Wie löse ich das am besten? Eine virtual = 0-Funktion in B einbauen und sie in D1 und D2 verschieden überladen?
Überschreiben, nicht überladen.
Überladen würde in dem Fall gar nix bringen.