Class.ForName in C++

Hallo,

gibt es in C++ etwas, das wie das aus Java bekannte „Class.ForName(…)“ funktioniert?

Mein Problem:
Ich entwickle ein Programm, bei dem dynamisch Objekte erzeugt werden - dabei gibt es aber nicht nur zwei oder drei Arten von Objekten, aus denen gewählt werden kann, sondern mind. 30 (später sogar noch mehr).

Immer wieder kommt es in meinem Programm vor, dass - nach Benutzerauswahl - ein Objekt von einer dieser Klassen instantiiert wird.

Bis jetzt arbeite ich das ganze mittels einer einer konfigurierbaren Factory ab, die als Singleton implementiert ist - aber ideal ist diese Lösung auch nicht…

Den Namen der Klasse, von der ein Objekt instantiiert werden soll, aus den Benutzereingaben zu erhalten, ist nicht sonderlich kompliziert.

Kann ich das, was ich mit Java diesbezgl. machen kann, auch mit C++?
Java-Code aufrufen ist übrigens definitiv nicht möglich!!!

Bitte, helft mir weiter!
Grüße,
Nina

Hallo,

gibt es in C++ etwas, das wie das aus Java bekannte
„Class.ForName(…)“ funktioniert?

nein, gibt es sicher nicht. Du könntest dir das aber selbst basteln: Leg in der Factory ein Array/Table/List oder sowas an, wo allen Namen die Klasse zugeordnet wird, und jede Klasse die erzeugt werden will, muss sich in dieser Liste anmelden. Dann beim Erzeugen wird sie halt verwendet um das Objekt zu bekommen.

Ich weiß nicht ob das mit C++ geht, ich kenn mich inzwischen mehr mit Java aus…

Klaus

Hallo,

gibt es in C++ etwas, das wie das aus Java bekannte
„Class.ForName(…)“ funktioniert?

Das kann es in C++ nicht geben, da C++ eine (durch-)kompilierte Sprache ist, soll heissen, es wird Binär-Code erzeugt, der nicht mehr (wie in Java) durch eine Virtual-Machine interpretiert wird. Dann kann der Klassentyp zum Erzeugen eines Objekts nicht während der Laufzeit bestimmt werden. Genauso können Konstruktoren nicht virtuell aufgerufen werden (das geht in Java allerdings auch nicht), da zum Greifen des Virtual-Mechanismus der Typ des Objekts bekannt sein muss (soll heissen, der Virtual-Table muss schon existieren).

Mein Problem:
Ich entwickle ein Programm, bei dem dynamisch Objekte erzeugt
werden - dabei gibt es aber nicht nur zwei oder drei Arten von
Objekten, aus denen gewählt werden kann, sondern mind. 30
(später sogar noch mehr).

Immer wieder kommt es in meinem Programm vor, dass - nach
Benutzerauswahl - ein Objekt von einer dieser Klassen
instantiiert wird.

Bis jetzt arbeite ich das ganze mittels einer einer
konfigurierbaren Factory ab, die als Singleton implementiert
ist - aber ideal ist diese Lösung auch nicht…

Das scheint mir für Dein Problem eine sehr gute Lösung (zumindest innerhalb C++) zu sein.

Den Namen der Klasse, von der ein Objekt instantiiert werden
soll, aus den Benutzereingaben zu erhalten, ist nicht
sonderlich kompliziert.

Du kannst den Namen einer Klasse auch mit dem typeid-operator (Ansi/ISO C++) erfahren. Du bekommst eine type_info-Objekt zurück, dieses hat eine Methode ‚char* name(void)‘, welche Dir den voll qualifizierten Klassennamen (also mit namespaces) zurück gibt.

Kann ich das, was ich mit Java diesbezgl. machen kann, auch
mit C++?

Nein, siehe oben.

Java-Code aufrufen ist übrigens definitiv nicht möglich!!!

Bitte, helft mir weiter!
Grüße,
Nina

Rolf