在 C 中扩展枚举?

新手上路,请多包涵

C++ 中有没有办法扩展/“继承”枚举?

IE:

 enum Enum {A,B,C};
enum EnumEx : public Enum {D,E,F};

或者至少定义它们之间的转换?

原文由 cvb 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 871
2 个回答

不,那里没有。

enum 确实是 C++ 中的可怜东西,这当然是不幸的。

即使是在 C++0x 中引入的 class enum 也没有解决这个可扩展性问题(尽管它们至少为类型安全做了一些事情)。

enum 的唯一优点是它们不存在:它们提供了一些类型安全性,同时不会施加任何运行时开销,因为它们被编译器直接替换。

如果你想要这样的野兽,你必须自己动手:

  • 创建一个类 MyEnum ,其中包含一个 int (基本上)
  • 为每个有趣的值创建命名构造函数

您现在可以随意扩展您的类(添加命名构造函数)…

虽然这是一种解决方法,但我从未找到一种令人满意的方式来处理枚举……

原文由 Matthieu M. 发布,翻译遵循 CC BY-SA 2.5 许可协议

我的方法与 Marco 选择的方法略有不同。

我添加了一个宏作为我想扩展的 enum 的最后一个值。在一个单独的标题中,我已经用我要添加的 enum 条目定义了该宏。

 // error.h
#ifndef __APP_DEFINED__
#define __APP_DEFINED__
#endif
typedef enum { a, b, c, __APP_DEFINED__ } Error;

为了添加更多值,我创建了

// app_error.h
#define __APP_DEFINED__ d, e, f,

最后,我在编译器标志中添加了 -include app_error.h

与在 --- 中放置 enum #include "app_error.h" 指令相比,我更喜欢这种方法,主要是因为我需要在某些项目中完全没有“app_error.h”文件的自由。

原文由 Antonio Astorino 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题