Zeiger auf Template-Klasse in einer nicht-Template-Klasse
-
Hallo,
ich habe eine Template-Klasse und eine nicht-Template-Klasse.
Kann ich in der nicht-Template-Klasse einen Zeiger auf die Template-Klasse setzen, ohne die nicht-Template-Klasse zu einem Template zu machen?
Etwa so:template<typename T> class A { //... }; class B { A* a; //g++: Fehler: ungültige Verwendung des Template-Namens »A« ohne eine Argumentliste };mfg D3lta
-
Das geht genausowenig wie du eine Variable vector v halten kannst. Hingegen geht vector<int> v und bei dir geht auch A<int>* a. Wenn du es allgemein halten willst als A<T>* a, musst du aus B eine Template-Klasse machen.
-
Nein geht nicht.
Macht auch keinen Sinn. Welchen Wert sollte T denn dann annehmen?
du könntest natürlich so etwas wie A<int> *a; definieren
-
Es heißt "Klassentemplate", nicht "Templateklasse".
-
Unter umständen kann es sinnvoll sein eine basisklasse einzuführen und dann das klassentemplate davon erben zu lassen, dann kannst du einen pointer auf die basisklasse speichern.
Das ist aber nur in speziellen fällen sinnvoll, ich habe es aber schoneinmal eingesetzt.
-
Naja, ein Zeiger zeigt, wenn er nicht initialisiert ist, ja auf kein Objekt.
Wenn man nun das Objekt für den Zeiger erstellt und dann dem Zeiger zuweist, hat T ja einen Typ.mfg D3lta
P.S.: In meinem Fall ist das dem hier ähnlich:
template<int I> class A { //... }; class B { A* a; //g++: Fehler: ungültige Verwendung des Template-Namens »A« ohne eine Argumentliste };Die Idee von Q würde Sinn machen, da B für alle Werte von I funktionieren soll, aber ohne Template
