c++ - 如何声明作为类中任何类型对象的数据成员

标签 c++ templates

在这篇文章中,我试图在 B 类中声明一个列表,该列表可以包含任何类型的 A 类对象,例如 A、A、A。我打算在运行时将 A 对象添加到列表中:

#include <list>

template <class T> class A {};

class B {
    template<class T> std::list<A<T>*> objects;
};

看起来像这样制作一个列表应该可以,但是编译它会出错:

Line 6: error: data member 'objects' cannot be a member template

compilation terminated due to -Wfatal-errors.

有人可以解释为什么这不起作用以及如何解决它吗?

最佳答案

这不是 C++ 的工作方式。如果你想将不同的对象组合在一起,它们至少需要有 some 关系。作为同一类模板的实例化并不意味着它们是相关的,它们是完全不同的类型。如果您想要 A<T>* 的列表s,最好通过虚函数制作一个基类指针列表和前向操作:

class A_base{
public:
  virtual void foo() = 0;
  virtual ~A_base() { }
};

template<class T>
class A : public A_base{
public:
  void foo(){
    // ...
  }
};

class B{
  std::list<A_base*> objects;
};

关于c++ - 如何声明作为类中任何类型对象的数据成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6261375/

相关文章:

c++ - 有人可以帮助我处理 C++ 模板中的嵌套名称说明符吗?

c++ - 只读类变量 (C++) 和运算符重载

c++ - 使用具有生成器类型的 C++ 模板函数

c++ - 属性可以应用于构造函数参数吗?

C++标准写法: Does "through all iterators in the range" imply sequentiality?

c++ - 在 2 个 cpp 文件中定义一个 C++ 类?

使用原始指针或智能指针创建 C++ 模板函数会得到不同的结果

c++ - 类型定义应该依赖于模板参数

c++ - 如何将常量放入代码内存

c++ - 元素的每一个和的可能性