c++ - 为什么将单个枚举封装在一个结构中?

标签 c++ c struct enums

这是离开公司的人写的。我看不出有任何理由这样做,并且很好奇我是否遗漏了什么。

enum thing_type_e
{
   OPTION_A = 0,
   OPTION_B,
   OPTION_C,
   OPTION_D
};

struct thing_type_data_s
{
   enum_type_e mVariable;
};

我认为他可能会在结构中添加更多内容,但在查看它的使用方式后,我不这么认为。

除非“他打算向结构中添加更多内容”,否则为什么要将单个枚举打包到结构中?有什么我没有想到的动机吗?

更新:

正如评论中所问,他以这种方式使用它:

void process_thing_type(thing_type_data_s* ParamVariable)
{
    local_variable = ParamVariable->mVariable;
    ...
}

如果有任何不同,这最初是用 GCC 3.3.5 构建的。

最佳答案

可能是为了加强某种类型安全。旧式枚举可以隐式转换为整数类型,这并不总是可取的。除此之外,它们没有作用域。

C++11 添加了作用域枚举(或“类”枚举)来解决这两个问题。

这是一个例子:

void foo(int) {}

int main()
{
  foo(OPTION_A);  // OK
  thing_type_data_s s = { OPTION_A };
  foo(s);  // Error
}

关于c++ - 为什么将单个枚举封装在一个结构中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21318722/

相关文章:

c - 在C中通过函数的参数访问结构成员

networking - 如何将通过网络接收到的 byte slice 转换为结构

c++ - 静态/动态运行时链接

c++ - 我想获取用户输入并将其放入字符串数组 c++

c - 如何使用 ASCII 在 C 中创建下拉菜单?

c - inotify API 与选择

c - C中的就地字符串反转

c - 使用结构的节点

c++ - 为什么我不能使用 <experimental/barrier>?

c++ - 在QT中连接到串口