Seite 1 von 1

[gelöst] Template-Klassen in vector

Verfasst: 22.05.2009, 17:10
von Dirk Schulz
Hi,

Ich versuche verschiedene Template-Klassen als Pointer in einem Vector zu speichern, leider meckert der Compiler, dass er nicht ordentlich casten kann, gibts da einen Trick, den ich noch nicht rausgefunden habe?

Hier mal ein Code als Beispiel:

Code: Alles auswählen

template <class T>
class A
{
     T  var;
};

class B
{
private:
     std::vector<A *> a_vector;

public:
     template <class T>
     A<T>* getA() {
         A<T>* newa = new A<T>();
         a_vector.push_back(newa);
         return newa;
     }
};
Er meckert dann bei dem push_back, dass er "A<T>*" nicht zu "A *const &" (wie kommt er denn darauf?) casten kann. Eigentlich sollte das doch kein Problem sein, schließlich will ich nur den Pointer speichern, nicht die Klasse selbst, oder?

Wäre über Tipps sehr dankbar.

Dirk Schulz

Re: Template-Klassen in vector

Verfasst: 22.05.2009, 17:20
von Tactive
A ist in Deinem Fall keine Klasse bzw. kann der Compiler das nicht als konkreten Typ auflösen (da es ja "nur" ein Template ist).
Wenn Du den Code folgendermaßen änderst, dann funktioniert es.

Code: Alles auswählen

struct Base { };

template <class T>
class A : public Base
{
	T  var;
};

class B
{
private:
	std::vector<Base *> a_vector;

public:
	template <class T>
	A<T>* getA() {
		A<T>* newa = new A<T>();
		a_vector.push_back(newa);
		return newa;
	}
};


int main(int argc, char* argv[])
{
	clog << "Hello world!" << endl;
	return 0;
}

Re: Template-Klassen in vector

Verfasst: 22.05.2009, 17:30
von Dirk Schulz
Hi,

da hätte ich auch selbst draufkommen können, aber manchmal hat man echt nen Brett vorm Kopf.

Wenn man zuviel mit Templates arbeitet, hat man irgendwann überhaupt keinen Durchblick mehr ;)

Danke für die schnelle Antwort, hat mein Problem gelöst

Dirk Schulz