派生类的类型模板

时间:2014-10-23 12:55:36

标签: c++ templates typename

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;

但是,显示的代码仅列出E,其中A为模板参数。我该如何解决?

1 个答案:

答案 0 :(得分:1)

使用C ++ 98(我对C ++ 11不熟悉)。

您需要多态并直接管理指针而不是对象。见这个例子:

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));

不要忘记管理你的记忆!