C++ 为什么要将单个枚举打包到结构中?

C++ 为什么要将单个枚举打包到结构中?,c++,c,struct,enums,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; }; 我想他可能会在结构上添加更多内容,但在研究了如何使用它之后,我不这么认为 除非“他打算向结构中添加更多”,为什么要在结构中打包单个枚举?有什么动机是我

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

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有什么不同的话,它最初是用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
}

是否有其他结构首先具有相同类型的成员,但在其他方面不同?他可能正在以一种基类-y的方式使用
struct thing\u type\u data\u s
。但谁知道,你把问题标记为C和C++。至少在C语言中是有意义的。

我认为您没有注意到枚举声明没有嵌套在结构中。这和你说的完全不一样。@TimothyShields不,我没有错过。要点是到整数类型的隐式转换。范围界定是另一个不相关的问题。胡安乔写了和我想的一样的东西。也许那个家伙认为“让我们使用struct而不是普通的enum”,没有可见性范围。谁知道呢……我可能应该提到是他写的,是用GCC 3.3.5构建的。@KeithThompson一个老派的枚举值在封闭的范围内。所以
enum颜色{蓝色,橙色};enum水果{苹果、橘子}是一个错误。这就是我所指的。结构是如何使用的?你能提供一些例子吗?我以前也看到过这样做-我记不起来了,但我认为这与简化调试有关-你可能可以看到调试器中列举的可能值?@WojtekSurowka用一个例子更新了这个问题。。。但这真的没什么特别的。我想知道这是否是为了让他在GDB中看得更清楚。可能他只是不确定传递指向枚举的指针是否合法。Enum显然不同于其他类型,我可以看到有人这样做是为了“安全起见”。我猜这个用法证实了@juanchopanza answerNo,没有。这只是一个结构。谢谢你的意见。