Type Info in C++?
-
Der Anfänger hat mal wieder ne Frage

Ich habe eine Klasse (Comic), die eine Liste von Spielfiguren list<ComicFigure> und diverse Methoden beinhaltet. Spielfiguren widerum haben eine Mutterklasse namens ComicFigure, und je nachdem abgeleitet, zb Warrior oder Wizzard. Nun bekomme ich in manche Methoden die Namen der angelegten Figuren rein und gehe die Liste durch bis ich den Namen finde.
Nun zur Frage:
Kann ich in der Liste vom Typ list<ComicFigure>, nachdem ich den entsprechenden Eintrag gefunden habe herausfinden ob es sich um einen Zauberer, oder Kämpfer handelt???
Wenn ja, wär ein kurzer Link nicht schlecht....Besten Dank im Voraus
der Duke
-
Doch es gibt typeid für polymorphe Klassen, schaum mal hier für ein Beispiel: http://docs.hp.com/en/B3901-90023/ch06s05.html
-
Das ist ein typischer Anwendungsbereich von Polymorphie. Falls du ein Buch hast lies in dem Kapitel nach, falls nicht gibts im Internet genug Infos. Du kannst zwar den Typ herausfinden, aber in der Regel braucht man das nichteinmal, wenn man eine gute Struktur hat.
-
Ah, Danke, genau DAS hab ich gesucht

-
Das Schlüsselwort dazu heißt typeid und kann in etwa so verwendet werden:
if (typeid (objekt) == typeid (Wizard)) mach_was_fuer_zauberer ();Allerdings hast du, wenn du sowas brauchst in den meisten Fällen einen Fehler im Klassendesign. Wie sieht denn die Basisklasse aus und wie soll sie verwendet werden?
Übrigens kannst du polymorphe Objekte nicht besonders gut in einer std::list verwalten. Schau dir mal Boost.PointerContainer an.
/edit Das kommt davon, wenn man so einen Tab zu lange offenlässt ...

-
.filmor schrieb:
Allerdings hast du, wenn du sowas brauchst in den meisten Fällen einen Fehler im Klassendesign.
Das schwirrte mir noch im Hinterkopf, aber warum weiss ich nicht. Wieso ist das schlechtes Design?
-
Wenn du sie durch einen Basisklassenzeiger ansprichst, brauchst du auch nur die Funktionalität, die die Basisklasse zur Verfügung stellt. Ansonsten musst du getrennt speichern.
-
Ah so, Danke

-
Duke79 schrieb:
Ah, Danke, genau DAS hab ich gesucht

Und wieder reitet einer einsam dem Designuntergang entgegen, ein melancholisches Lied auf den Lippen und bereit, für seine Selbständigkeit das Leben zu lassen ....
Gruß,
Simon2.
-
Simon2 schrieb:
Und wieder reitet einer einsam dem Designuntergang entgegen, ein melancholisches Lied auf den Lippen und bereit, für seine Selbständigkeit das Leben zu lassen ....
Wer ist hier melancholisch?! :p
Ne das Problem ist, das der Chef himself (Marc++us) in seinem Buch für Dummies die typeid verwendet um Produkte in ner Factory zu registrieren via Name.