Technician Geschrieben 28. Oktober 2002 Geschrieben 28. Oktober 2002 Hallo, gibt es irgendeine Möglichkeit, Objekte dynamisch nicht nur per if-Auswahl zu erzeugen, sondern "direkt" per übergebenem String? also nicht if (myString == "MyClassOne") { MyClass* pMyClass = new MyClassOne; } elseif (myString == "MyClassTwo") { MyClass* pMyClass = new MyClassTwo; } ... sondern irgendwie direkt nach dem Motto "erzeuge neues Objekt vom Typ (...)" Ich möchte mir da auch nicht etwa eine Methode schreiben, denn dann muss ich mir ja doch wieder - in der Methode - die if-Auswahl basteln. Es handelt sich nämlich nicht nur um zwei oder drei Klassen, sondern um ca. 30 Klassen :eek: Da das Programm höchstwahrscheinlich immer wieder um neuen Klassen erweitert wird, ist das ziemlich problematisch. Weiß jemand Abhilfe?! Technician
Guybrush Threepwood Geschrieben 28. Oktober 2002 Geschrieben 28. Oktober 2002 Hi, also soweit ich weiß ist soetwas nicht möglich(obwohl es äußerst hilfreich wäre). Dir bleibt leider nichts anderes übrig als es mit if anweisunfgen zu lösen, oder mache es mit switch. Gruß Guybrush
fmarx2000 Geschrieben 28. Oktober 2002 Geschrieben 28. Oktober 2002 Originally posted by Technician gibt es irgendeine Möglichkeit, Objekte dynamisch nicht nur per if-Auswahl zu erzeugen, sondern "direkt" per übergebenem String? Du könntest das If-Then oder Switch - case in einer sogenannten konfigurierbaren Factory verstecken die als Singleton implementiert wird (siehe dazu E. Gamma , Design Patterns). Da immer mehr Klassen hinzukommen können, würde ich dies mit so einer Factory lösen, das geht aber nur richtig gut wenn alle Klassen eine bestimmtes Konzept (Schnittstelle implementieren). In JAVA kann mit Class.forName (oder so)) das Problem relativ einfach lösen. In C++ weiss ich sonst keine andere Möglichkeit momentan. Eventuell solltest du mal unter dem Kapitel RTTI nachsehen vielleicht findet dich ja da was. Frank
Technician Geschrieben 28. Oktober 2002 Autor Geschrieben 28. Oktober 2002 Originally posted by fmarx2000 Du könntest das If-Then oder Switch - case in einer sogenannten konfigurierbaren Factory verstecken die als Singleton implementiert wird (siehe dazu E. Gamma , Design Patterns). Da immer mehr Klassen hinzukommen können, würde ich dies mit so einer Factory lösen, das geht aber nur richtig gut wenn alle Klassen eine bestimmtes Konzept (Schnittstelle implementieren). ... ja, darauf bin ich auch schon gekommen. Das mit der Schnittstelle wär eigentlich kein Problem, da dies für eine andere Funktionalität des Programms ja auch benötigt wird. Nur hätte ich ja wieder die Auswahlentscheidung beim Erzeugen der Objekte drin... Originally posted by fmarx2000 In JAVA kann mit Class.forName (oder so)) das Problem relativ einfach lösen. In C++ weiss ich sonst keine andere Möglichkeit momentan. Eventuell solltest du mal unter dem Kapitel RTTI nachsehen vielleicht findet dich ja da was. ich werd mal weiter im Internet stöbern... Würd mich schon wundern, wenn's das für C++ nicht gäbe... Danke! Technician
fmarx2000 Geschrieben 28. Oktober 2002 Geschrieben 28. Oktober 2002 Originally posted by Technician [b ich werd mal weiter im Internet stöbern... Würd mich schon wundern, wenn's das für C++ nicht gäbe... Danke! Technician Ich denke mal, dass es das für C++ nicht gibt, deshalb denke ich, wäre die Factory eine gute Lösung, da du das mit dem SWITCH dann zentral an einer Stelle hast was ja eigentlich nicht sooooo schlimm sein dürfte. Frank
Jaraz Geschrieben 28. Oktober 2002 Geschrieben 28. Oktober 2002 Originally posted by Technician ich werd mal weiter im Internet stöbern... Würd mich schon wundern, wenn's das für C++ nicht gäbe... Nicht ganz dasselbe aber im Prinzip kommt das gleiche bei rum. http://www.isotton.com/howtos/C++-dlopen-mini-HOWTO/C++-dlopen-mini-HOWTO.html Gruß Jaraz
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden