我有一个类中,我有一个枚举,这样的定义:typedef'ing一个枚举不会使枚举值可见
class X
{
public:
enum Direction {DIR_LEFT, DIR_RIGHT};
};
现在我想此枚举在另一个类可以重复使用,像这样:
class Y
{
public:
typedef X::Direction Direction;
};
正如预期的那样,使用ÿ::方向正常工作,如:
void myFunction (Y::Direction dir)
{
}
但ENU内的值meration似乎不会与typedef一起“复制”。如果我写了下面,我得到的编译错误:
myFunction (Y::DIR_LEFT);
相反,我不得不再次提及原来的地方枚举的,像这样的:
myFunction (X::DIR_LEFT);
这违背了我的typdefing的目的枚举。
我看到的唯一解决方案是将枚举从类X中移出,并将其放入另一个类(例如MyEnums),以便它可以被X和Y重用(尽管它们仍应该使用MyEnums :: DIR_LEFT并且MyEnums :: DIR_RIGHT),但至少代码不再依赖于类X.
为什么枚举值本身没有通过typedef公开?
是否有任何其他模式来管理不同类中的枚举?
你可能应该删除'DIR_'前缀,因为它是一个人造的“穷人的命名空间”:'struct Direction {enum {LEFT,RIGHT};};' - 只比C++ 0x语法更脏“枚举类方向{LEFT,RIGHT};' – anatolyg 2011-03-15 18:01:36
@anatolyg事实上,这是一个好主意,我做了这个改变。 – 2011-03-15 18:19:04