为什么在结构中打包单个枚举?

kmo*_*ort 7 c c++ enums struct

这是由离开公司的人写的.我看不出有任何理由这样做,我很好奇我是否有遗漏的东西.

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

struct thing_type_data_s
{
   enum_type_e mVariable;
};
Run Code Online (Sandbox Code Playgroud)

我认为他可能会在结构中添加更多内容,但在查看它是如何使用后,我不这么认为.

除非"他要为结构添加更多内容",为什么要在结构中打包单个枚举?我有没有想到的动机?

更新:

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

void process_thing_type(thing_type_data_s* ParamVariable)
{
    local_variable = ParamVariable->mVariable;
    ...
}
Run Code Online (Sandbox Code Playgroud)

这最初是用GCC 3.3.5构建的,如果它有任何区别的话.

jua*_*nza 13

可能要强制执行某种类型的安全.旧式枚举可以隐式转换为整数类型,但这并不总是可取的.除此之外,他们还没有人.

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

这是一个例子:

void foo(int) {}

int main()
{
  foo(OPTION_A);  // OK
  thing_type_data_s s = { OPTION_A };
  foo(s);  // Error
}
Run Code Online (Sandbox Code Playgroud)

  • @TimothyShields不,我没有错过.重点是隐式转换为整数类型.范围界定是另一个无关的问题. (2认同)
  • @KeithThompson一个old-schoole枚举值在封闭范围内.所以`enum Color {Blue,Orange}; enum Fruit {Apple,Orange};`是一个错误.这就是我所说的. (2认同)