C ++使用指向模板对象的指针

时间:2011-02-23 23:48:28

标签: c++ templates pointers template-specialization

我有一个名为ABC的类,它有一个类模板:

template <class T> class ABC{}

在另一个类中,我试图将对象ABC存储在列表中:

class CDE{
private:
  list<ABC *> some_list; 
}

我打算存储可能具有不同类模板参数的ABC对象。是否有必要在编译时为指针指定模板?如果容器应该存储不同类型的对象怎么办?这不可能吗?

3 个答案:

答案 0 :(得分:7)

  

是否有必要在编译时为指针指定模板?

  

如果容器应该存储不同类型的对象怎么办?这不可能吗?

(直接)不可能。

没有类ABC这样的东西。只有ABC的实例化,例如ABC<Foo>ABC<Bar>。这些是完全不同的类。

您可以执行以下操作:

template<typename T>
class ABC : public ABC_Base
{
  ...
}

list<ABC_Base*> some_list;

通过执行此操作,所有ABC实例都具有公共基本类型,您可以任意使用基本指针。

答案 1 :(得分:1)

您需要在CDE课程中指定模板参数,或者使CDE成为模板。

第一个选项:

class CDE {
private:
    list< ABC<int>* > some_list;
};

第二个选项:

template <class T>
class CDE {
private:
    list< ABC<T>* > some_list;
};

答案 2 :(得分:1)

该列表只能存储一种类型。模板的不同实例是不同的类型。如果这是令人满意的,你可以这样做:

template <class T> class CDE{ private: list<ABC<T> *> some_list; }

如果你需要使用不同的类型,也许你可以为ABC创建一个非模板基类并存储指向它的指针。 (即使用界面)