我有一个类,我有一个枚举,定义如下:
class X
{
public:
enum Direction {DIR_LEFT, DIR_RIGHT};
};
Run Code Online (Sandbox Code Playgroud)
现在我希望这个枚举在另一个类中重用,如下所示:
class Y
{
public:
typedef X::Direction Direction;
};
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,使用Y :: Direction可以正常工作,例如:
void myFunction (Y::Direction dir)
{
}
Run Code Online (Sandbox Code Playgroud)
但枚举中的值似乎与typedef一起"复制".如果我写下面的内容,我会收到编译错误:
myFunction (Y::DIR_LEFT);
Run Code Online (Sandbox Code Playgroud)
相反,我必须再次引用枚举的原始位置,如下所示:
myFunction (X::DIR_LEFT);
Run Code Online (Sandbox Code Playgroud)
这违背了我列举枚举的目的.
我看到的唯一解决方案是将枚举移出X类,并将其放在另一个类(例如MyEnums)中,因此它可以被X和Y重用(尽管它们仍然应该使用MyEnums :: DIR_LEFT和MyEnums :: DIR_RIGHT ),但至少代码不再依赖于X类.
为什么枚举值本身没有通过typedef公开?
是否有其他模式来管理不同类中的枚举?
Mar*_*k B 14
不幸的是,C++没有引入新的范围,enum尽管C++ 0x正在改进.
实际上,这意味着您不能键入定义枚举并获取枚举值.
你可以做的是使用一个嵌套的结构,其中包含enum和typedef THAT所需的名称.
class X
{
public:
struct Direction { enum EnumType {LEFT, RIGHT}; };
};
class Y
{
public:
typedef X::Direction Direction;
};
Run Code Online (Sandbox Code Playgroud)
现在你可以这样做:
myFunction (Y::Direction::LEFT);
嵌套结构的目的是创建一个"伪"范围来保存枚举名称及其值.
| 归档时间: |
|
| 查看次数: |
3885 次 |
| 最近记录: |