c++ - 定义动态结构

标签 c++ dynamic struct definition

我想在某个字段中定义一个具有不同变量类型的结构。例如我定义了这样一个结构:

struct sensor {
  int index;
  int value;
};

struct sensor2 {
  int index;
  float value; 
};

我只想声明一个具有两个选项的结构,一个是整数值,另一个是时间浮点值,但采用独特的结构。 我的问题是: 1.无论如何声明一个结构并传递参数以选择一种类型(int或float或...)? 2. 我可以为此使用模板吗?

struct sensor {
  int index;
  type_as_option value; //int or float
};

非常感谢你的帮助

最佳答案

您有多种选择。您可以将其设为模板:

template <typename T>
struct sensor {
    int index;
    T value;
};

但是,如果您希望这两个结构是同一类型,这不是您要找的,因为

sensor<int>

sensor<float>

是两种不同的类型。

第二个选项是(正如 immibis 在评论中指出的那样)简单地制作一个包含两者的结构

struct sensor {
    int index;
    int ivalue;
    float fvalue;
};

但是,这会引入将近 50% 的内存开销,而使用 union 可以避免这些开销:

union intOrFloat {
    int ivalue;
    float fvalue;
};

struct sensor {
    int index;
    intOrFlaot value;
};  

union 总是只有一个字段是事件的,并且它不会使用比必要更多的内存。

关于c++ - 定义动态结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38335012/

相关文章:

具有已知事件签名的 C# 2.0 动态事件订阅

iphone - 尽管标记了文件 -fno-objc-arc,但 ARC 禁止在结构或联合中使用 Objective-C 对象

c++ - 通过Xcode使用GCC编译基本程序

c++ - 使用构造函数参数实例化类对象和不带参数 C++ 的 * 运算符之间的区别

c++ - 如何在 Objective-C 或 C++ 中打开 ".msg"(Microsoft Outlook 消息)文件

javascript - 使用 jQuery 替换文本时出现多个链接错误

c++ - 程序中止挂起命名的互斥量

python - 如何从Python3的列表中调用我自己的方法?

C++动态数据结构

C#如何输出类(结构)中的所有项目