gpt4 book ai didi

c++ - 模板类的 vector

转载 作者:行者123 更新时间:2023-11-30 00:50:05 25 4
gpt4 key购买 nike

(我已经阅读了几个关于这个问题的现有问题,它们看起来略有不同,并没有让我更清楚这个问题。)

我正在尝试创建一个键值对 vector ,其中的值是通用的。 逻辑上指示我需要的代码如下:

#include <stdio.h>
#include <string.h>
#include <vector>

template <typename T>
class CCmd
{
protected:
char name[64];
T value;

public:
CCmd(char* _name, T _value)
{
strcpy(name, _name);
value = _value;
}

T getValue()
{
return value;
}

void setValue(T _value)
{
value = _value;
}
};

int main()
{
std::vector<CCmd*> vec;

vec.push_back(new CCmd<int>("gravity", 150));
vec.push_back(new CCmd<char*>("configfile", "config.cfg"));

printf("Value = %d\n", vec[0]->getValue());
printf("Config = %s\n", vec[1]->getValue());

return EXIT_SUCCESS;
}

这无法以我认为在语法上正确的所有方式进行编译。我读到一个问题,需要使用基类来封装泛型类,但是我通过创建一个空类来尝试这样做,并使我的泛型类成为它的子类:

...
class CCmdBase
{
};

class CCmd : public CCmdBase
{
...

并且编译器提示 CCmdBase 没有名为 getValue 的成员,如果它返回泛型类型 T,这意味着基类也将需要对我来说是通用的才能在那里定义它,这意味着我回到了开始的地方?

请帮忙;我在这里错过了什么?

最佳答案

用 C++ 无法轻松完成您的方法。很可能你的设计不正确,应该改进。很难建议确切的方法,但可能的解决方案是使用带有纯虚函数的抽象基类。尽管在您当前的“设计”中您的虚函数不能是 setValuegetValue,因为函数签名必须与虚函数匹配。

如果您真的需要在 vector 中使用不同的值来实现方法,请查看 std::tupleboost::variantboost::any 。同样,不要指望此类解决方案的使用对您来说很容易理解和直接。

关于c++ - 模板类的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26127959/

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