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

    Element
    

    ist, muss du Manager auch als Template implementieren

    template<typename T>
    class Manager
    {
    ...
    private:
    std::vector<Element<T> > m_vector
    };
    

  • Mod

    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


Anmelden zum Antworten