ein Anfänger hat da mal ne Frage. Brauche ne Möglichkeit dynamisch Klassen zu laden. Ein Bekannter meinte es gebe in C/C++ die Möglichkeit aus einem String ne Klasse zu instantiieren. Als Beispiel:
Man startet eine Anwendung namens BSP.exe und übergibt den Namen als Parameter:
C:\>BSP.exe "foo"
In BSP.exe findet man jetzt ne Stück der (in etwa) so aussieht:
int main(arg)
string s = arg;
foo einfoo;
einfoo = new *s;
Geht sowas?
Sorry, bin heut nich mehr in der Lage richtigen Code zu schreiben.
Danke und schönes Wochenende
MatthiasDieser Post wurde am 09.10.2005 um 08:44 Uhr von Pablo editiert.
Klar gibt es das. Ist die Frage wo die Klasse herkommt. Am einfachsten ist sie schon im Programm implementiert, wenn nicht müsste man mit shared libiaries rummähren. Was man braucht ist eine virtuelle Basisklasse der benannten Klasse und eine Finderfunktion. Die Basisklasse muss alle Funktionen, die man später in der abgeleiteten Klasse aufruft schon haben, aber virtuell.
C++:
class basis { public: virtualint schnittstelle(void); }
class foo : public basis { public: int schnittstelle(void) { return10; } }
basis * finder(string which){ if (which.compare("foo")) returnnew foo(); return0; }
int main(int argc, char *argv[]){ basis *test = finder(argv[1]); if (test != 0) cout << test->schnittstelle() << endl; }
Das Problem dabei ist, das bei dem Projekt neue Klassen dynamisch hinzugefügt werden sollen. Also keine Änderungen am Quelltext des Progs gemacht werden sollen. Die Klassen haben aber auf jeden Fall ne abstrakte Oberklasse. Mein Bekannter meinte dazu das man mit
C++:
new *s
eine Instanz "vom Inhalt des Strings s" erzeugen kann. Also die Frage geht das mit new *s?