每当我想在许多文件中共享一个枚举时,我会: -
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 */
};
这可能是未来恐惧钻石问题的原因吗?
顺便说一句,我认为enum-class不属于这个问题的范围。
答案 0 :(得分:3)
不是"危险"每本身。这只是糟糕的设计 类继承应该定义一个IS-A关系。
当继承自然而非自然的东西时,你往往会在发展道路上遇到问题。
可能影响您的一些设计含义是:
1.更深层继承图中同一类的多重继承
2.如果您将来更改继承结构,可能会影响指针强制转换(这是您不希望仅仅为了方便继承而发生的事情)
一些更好的解决方案:
1.在命名空间中包含枚举 - 使用#using namespace。在标头中添加它将传播到包含该标头的任何编译单元
2.在C ++ 11中,您可以使用enum classes - 不在继承中,但它可以提供更强的类型安全性。