每当我想在许多文件之间共享枚举时,我会:-
- 创建一个类,例如
B
专用于枚举 - 想要轻松访问枚举的类将从
B
派生
大多数情况下,一个枚举对应一个类。 (1:1)
class B{
public: enum EnumB{ E1,E2 };
};
class C : public B{ /* .... access EnumB */}; //a kind of struct
class D : public B{ /* .... access EnumB */}; //a kind of widget/manager
此方法使 C
和 D
能够访问 EnumB
不带任何前缀 B
。
我认为没关系,因为我在非常狭窄的范围内使用这些枚举。 (2-4类)
A SO post还指出可以使用继承来实现实用性。
但是,我不认为这是一种流行的方法:-
问题
我的方法有多危险?它的缺点是什么?
在实际情况中,我倾向于为此多重继承许多类。
class ShadowEnum{ public: enum ShadowE{ SHADOW,NO_SHADOW}; }; class ColorEnum{ public: enum ColorE{ RED,BLUE,GREEN,PURPLE } }; class LightType{ public: enum LightE{ L_SPHERE, L_CONE, L_SPOT}; }; class LightManager : public ShadowEnum, public ColorEnum,public LightType{ /* some code */ };
这会成为 future 可怕菱形继承(钻石问题)的原因吗?
顺便说一句,我认为enum-class不在本问题讨论范围内。
最佳答案
它本身并不“危险”。这只是糟糕的设计。
类继承应该定义 IS-A 关系。
当继承不“自然”的东西时,您往往会在以后的开发过程中遇到问题。
可能影响您的一些设计含义是:
1、更深的继承图中同一个类的多重继承。
2. 如果您将来更改继承结构,指针强制转换可能会受到影响(这是您不希望仅仅为了方便继承而发生的事情)
一些更好的解决方案:
1. 将枚举包含在命名空间中 - 使用 #using namespace 。在 header 中添加该内容将传播到包含该 header 的任何编译单元。
2.在C++11中你可以直接使用enum classes - 不在继承中,但它为您提供更强的类型安全性。
关于c++ - 继承只是为了共享枚举 - 危险吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42744566/