[gelöst] Template-Klassen in vector

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Dirk Schulz
Establishment
Beiträge: 130
Registriert: 01.03.2009, 14:21
Alter Benutzername: frittentuete

[gelöst] Template-Klassen in vector

Beitrag 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
Zuletzt geändert von Dirk Schulz am 22.05.2009, 17:30, insgesamt 1-mal geändert.
Tactive
Beiträge: 61
Registriert: 21.07.2004, 15:10
Kontaktdaten:

Re: Template-Klassen in vector

Beitrag 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;
}
Dirk Schulz
Establishment
Beiträge: 130
Registriert: 01.03.2009, 14:21
Alter Benutzername: frittentuete

Re: Template-Klassen in vector

Beitrag 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
Antworten