gpt4 book ai didi

c++ - 在 C++ 中可以有一个包含类模板的 vector 吗?

转载 作者:搜寻专家 更新时间:2023-10-31 01:42:33 25 4
gpt4 key购买 nike

我想创建一个结构/类,其中至少有一个具有泛型类型的成员变量。 T 可以是从 bitset 到 char 数组的任何内容。让我们称之为“场”。

然后,我想要一个包含多个 Field 对象实例的列表/vector/数组。

这样的数据结构在 C++ 中是否可行?

这就是我的解决方案现在的样子并且它没有编译因为

error C3203: 'Field' : unspecialized class template can't be used as a template argument for template parameter '_Ty', expected a real type
error C2955: 'Field' : use of class template requires template argument list

class Main
{
public:

template<typename T> class Field {
public:
CString name;
bool state;
T actualValue;
};

vector<Field> m_Message;
};

...

Field field1 = new Field();
field1.actualValue = 1;

Field field2 = new Field();
field2.actualValue = 1.1;

vector<Field> message;

message.push_back(field1);
message.push_back(field2);

这是我第一次在堆栈溢出上发帖,所以对于格式错误或问题含糊不清,我深表歉意。

最佳答案

不完全是。这是问题所在,因为我们遍历 vector

for (...:iteraor e....) {
e->m_Message.actualValue;
}

actualValue 的类型是什么?你可能会说每次都不一样,但 C++ 不是那样工作的,代码中的每个表达式都有 1 种类型。 (除了模板之外,这基本上只是为您输入的每种类型提供一份新的代码拷贝)

您可以为所有字段创建一个基类,然后创建引用(但不能复制到 vector 中)。

class FieldBase {
public:
CString name;
bool state;
};
template<typename T>
class Field public: FieldBase
{
public:
T actualValue;
};
vector<FieldBase*> m_Message;

然后您将需要一些消息来发送您正在处理的消息类型。可能是重载方法。

关于c++ - 在 C++ 中可以有一个包含类模板的 vector 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26684790/

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