gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 23:12:02 24 4
gpt4 key购买 nike

在这篇文章中,我试图在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com