C++命名空间'使用'声明用于类的枚举

Jmo*_*y38 10 c++ namespaces

我很好地理解了C++"使用"声明和指令是如何工作的.但是,我对此感到难过......也许这不可能?我想避免质量我的枚举变量:

namespace Foo { 
   class MyClass {
      public: 
         enum MyEnum { X, Y, Z };
   }
}
Run Code Online (Sandbox Code Playgroud)

现在,从该命名空间外部,我希望能够做到这样的事情:

using Foo::MyClass.MyEnum;
MyEnum letter = MyEnum::x;
Run Code Online (Sandbox Code Playgroud)

但显然那不是这样做的方法吗?我打赌这是可能的,但我的符号是错误的...我也尝试使用Foo :: MyClass :: MyEnum,但编译器认为Foo :: MyClass是一个命名空间.

补充:正如你所看到的,完全宣布一切都变得很烦人......

Foo::MyClass::MyEnum value = Foo::MyClass::X;
Run Code Online (Sandbox Code Playgroud)

Chr*_*ick 5

这不能直接回答你的问题,但是如果你想节省击键,你可以尝试使用typedef.

typedef Foo::MyClass::MyEnum MyClassEnum;
Run Code Online (Sandbox Code Playgroud)

顺便说一下,看起来你的问题已经在Stack Overflow上被问过了.从答案到这个问题:

类没有定义命名空间,因此"使用"在这里不适用.


Pup*_*ppy 1

C++03 不支持完全限定enum类型,但它是 MSVC 扩展。C++0x 将制定此标准,我相信您可以在 C++0x 中using实现enum。然而,在C++03中,我不相信你的问题能够得到解决。