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?
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 !