C++ 中有没有办法扩展/“继承”枚举?
IE:
enum Enum {A,B,C};
enum EnumEx : public Enum {D,E,F};
或者至少定义它们之间的转换?
原文由 cvb 发布,翻译遵循 CC BY-SA 4.0 许可协议
C++ 中有没有办法扩展/“继承”枚举?
IE:
enum Enum {A,B,C};
enum EnumEx : public Enum {D,E,F};
或者至少定义它们之间的转换?
原文由 cvb 发布,翻译遵循 CC BY-SA 4.0 许可协议
我的方法与 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 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
不,那里没有。
enum
确实是 C++ 中的可怜东西,这当然是不幸的。即使是在 C++0x 中引入的
class enum
也没有解决这个可扩展性问题(尽管它们至少为类型安全做了一些事情)。enum
的唯一优点是它们不存在:它们提供了一些类型安全性,同时不会施加任何运行时开销,因为它们被编译器直接替换。如果你想要这样的野兽,你必须自己动手:
MyEnum
,其中包含一个 int (基本上)您现在可以随意扩展您的类(添加命名构造函数)…
虽然这是一种解决方法,但我从未找到一种令人满意的方式来处理枚举……