gpt4 book ai didi

c++ - 使结构接受任何类型而不是 float

转载 作者:行者123 更新时间:2023-12-02 10:36:31 25 4
gpt4 key购买 nike

我需要修改一个简单的结构来接受多种类型的值参数,如下所示:

struct menuitems_t
{
menuitems_t(std::string name, float* value = 0, int itemtype = menuitemtype::SWITCH)
{
this->name = name;
this->value = value;
this->itemtype = itemtype;
}

std::string name;
float* value;
int itemtype;
};

我试图从中创建一个模板,但没有运气。
声明其中之一就像 menuitems_t(nameString, val1, type);我唯一的问题是,如果我想使用 bool 作为引用值,它显然不会接受它。 (我可以将它转换为浮点数,但这不是我想要的。)
我应该在其中修改什么以接受任何类型?

最佳答案

您可以使用 void* ,但这是一个非常 C 风格和类型不安全的问题解决方案。
任何其他指针都可以转换为 void -pointer 隐式,但您需要自己跟踪类型。

struct menuitems_t
{
std::string name;
void* value;
int itemtype;
};

void foo() {
menuitems_t myItems{"name", nullptr, 0};
// ...
}

附带说明,您不需要自定义构造函数,只需使用 aggregate-initialization .
最好使用 nullptr而不是 0 .

使用模板会更安全,但您需要在编译时跟踪类型。

template <typename T>
struct menuitems_t
{
std::string name;
T value; // or T* value if it's still supposed to be a pointer
int itemtype;
};

如果类型数量有限,您可以使用 std::variant .您也可以只使用 union ,但 union 没有运行时类型安全,如 std::variant .

struct menuitems_t
{
std::string name;
std::variant<float, bool> value;
int itemtype;
};

关于c++ - 使结构接受任何类型而不是 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60040629/

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