【发布时间】:2020-02-03 13:51:53
【问题描述】:
我需要修改一个简单的结构来接受多种类型的值参数,如下所示:
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 作为引用值,它显然不会接受它。 (我可以将它转换为浮点数,但这不是我想要的。)
我应该在其中修改什么以接受任何类型?
【问题讨论】:
-
首先,除非是学校或作业要求,否则不要对数组使用指针,而是使用
std::vector。其次,您似乎正在寻找的是模板。请花一些时间在您的书中阅读它们。 -
您知道您希望能够接受的类型吗?如果是这样,您可以使用 std::variant
-
你听说过我们的救世主Templates吗?
-
或者您可以为
value字段使用通用类型。您还可以查看this answer 并创建自己的模板类,该类接受除 Float 之外的所有类型 -
它到底应该做什么?接受和忽略参数总是安全的。存储以备后用是有问题的,因为在使用时您不知道存储时的类型。
标签: c++ templates struct declaration