在这篇文章中,我试图在 B 类中声明一个列表,该列表可以包含任何类型的 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/