Templates in templates
-
Hallo,
ich habe eine Klasse, die ich als Template implementieren will, da sie als Membervariable unterschiedliche Datentypen haben kann. Also sowas:
Element.h:
template<class T> class Element { public: Element(T value); private: T m_value; };Nun hätte ich gerne in einer anderen Klasse einen vector mit solchen Elementen. Ich scheine aber noch etwas bei der Deklaration durcheinander zu bringen, oder geht das gar nicht?
Manager.h:
class Manager { ... private: std::vector<RMElement<> > m_vector; };Jemand eine Idee?
Grüße
Joschii
-
Unter der Annahme, dass
RMElement<>gleich
Elementist, muss du Manager auch als Template implementieren
template<typename T> class Manager { ... private: std::vector<Element<T> > m_vector };
-
Wenn du in dem vector tatsächlich Element mit jeweils unterschiedlichen Templateparametern speichern willst: Nein, das geht nicht, vector kann nur daten von genau einem Typ speichern. Alternativen wären Zeiger auf eine gemeinsame Basisklasse oder ein Container der für solche Aktionen ausgelegt ist, z.B. boost variant.
-
Edit: -.-
-
Ich würde auch zu Type Erasure mittels gemeinsamer Basisklasse raten, wenn du kein Boost hast.
class BaseElement { public: virtual ~BaseElement(); // ... }; template <typename T> class Element : public BaseElement { // ... };Und vielleicht noch irgendwie sicherstellen, dass der Speicher von
std::vector<BaseElement*>schön freigegeben wird.
-
erledigt