Search code examples
c++templatestypename

type template for derived classes


template <typename ElementType>
class AList{};
class A{};
class B : public A{};
class C : public A{};
class D : public A{};
template <typename TypeE>
class E{};
(...)
       AList< E<A> > ListofEwithBCandDasTypE;

However the displayed code only makes a list of E with A as template argument. How can I solve that?


Solution

  • With C++98 (I'm not comfortable with C++11).

    You need polymorphism and manage pointers instead of objects directly. See this example :

    class A
    {
      public:
        virtual ~A() {}
    };
    class B : public A
    {
      public:
        virtual ~B() {}
    };
    class C : public A
    {
      public:
        virtual ~C() {}
    };
    template <typename T>
    class AList
    {
      public:
        add(T* x);
        // ...
    };
    template <typename T>
    class E
    {
      public:
        E(A* ptr) { /*...*/ }
        // ...
    };
    AList< E<A*> > list;
    list.add(E(new B));
    list.add(E(new C));
    

    Don't forget to manage your memory !