c++ - 使结构接受任何类型的浮点数
问题描述
我需要修改一个简单的结构来接受多种类型的值参数,如下所示:
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
. 您也可以只使用 a union
,但联合没有像std::variant
.
struct menuitems_t
{
std::string name;
std::variant<float, bool> value;
int itemtype;
};
推荐阅读
- firebase - Cloud Function 未执行 Flutter
- terminal - Terminal nano 不会退出
- python - 如何从python列表中的datafarmes获取空行?
- awk - 仅当在变量中指定的函数的函数定义中找到模式时才替换模式
- javascript - 为什么使用 JS 计算的宽度和 CSS 中基于百分比的宽度之间存在差异?
- ios - CarPlay - 在 iOS 13 中显示正在播放的屏幕
- javascript - 如何获取不和谐语音频道的成员列表
- karate - 如何将数据库结果行日期字段匹配为字符串?
- javascript - fullCalendar V3 工具提示在悬停时不显示
- c++ - 在 C++ 中为 ROS2 寻找 cv_bridge 示例