我有一个类,其中有一个枚举,定义如下:
class X
{
public:
enum Direction {DIR_LEFT, DIR_RIGHT};
};
现在我希望在另一个类中重用这个枚举,如下所示:
class Y
{
public:
typedef X::Direction Direction;
};
正如预期的那样,使用 Y::Direction 可以正常工作,例如:
void myFunction (Y::Direction dir)
{
}
但枚举中的值似乎没有与 typedef 一起“复制”。如果我编写以下内容,则会出现编译错误:
myFunction (Y::DIR_LEFT);
相反,我不得不再次引用枚举的原始位置,像这样:
myFunction (X::DIR_LEFT);
这违背了我定义枚举的目的。
我看到的唯一解决方案是将枚举移出 X 类,并将其放入另一个类(例如 MyEnums),以便 X 和 Y 可以重用它(尽管它们仍应使用 MyEnums::DIR_LEFT 和 MyEnums::DIR_RIGHT),但至少代码不再依赖于类 X。
为什么枚举值本身没有通过 typedef 暴露?
还有其他模式可以管理不同类中的枚举吗?
最佳答案
不幸的是,尽管 C++0x 正在改进一些东西,但 C++ 并没有引入带有 enum
的新作用域。
实际上,这意味着您不能 typedef 枚举并获取枚举值。
你可以做的是使用一个嵌套结构,它具有你想要的枚举名称和 typedef THAT。
class X
{
public:
struct Direction { enum EnumType {LEFT, RIGHT}; };
};
class Y
{
public:
typedef X::Direction Direction;
};
现在您可以:
myFunction (Y::Direction::LEFT);
嵌套结构的目的是创建一个“假”范围来保存枚举名称及其值。
关于c++ - typedef'ing enum 不会使 enum-values 可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5315716/