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

时间:2011-06-09 19:48:21

标签: c++ namespaces

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

namespace Foo { 
   class MyClass {
      public: 
         enum MyEnum { X, Y, Z };
   }
}

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

using Foo::MyClass.MyEnum;
MyEnum letter = MyEnum::x;

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

补充:正如您所看到的那样,完全宣布所有内容变得很烦人......

Foo::MyClass::MyEnum value = Foo::MyClass::X;

3 个答案:

答案 0 :(得分:5)

这不会直接回答您的问题,但如果您想节省击键次数,可以尝试使用typedef。

typedef Foo::MyClass::MyEnum MyClassEnum;

顺便说一下,它看起来像your question has been asked on Stack Overflow before。从这个问题的答案:

  

类没有定义命名空间,   因此“使用”不适用   这里。

答案 1 :(得分:1)

在搞砸了很多东西后,我得到了以下内容进行编译。我认为如果没有typedef的话,它将是最接近的。

namespace Foo {
    class MyClass {
        public:
            enum MyEnum { X, Y, Z };
    };
};

namespace Foo2 {
    using Foo::MyClass; 

    class AnotherClass {
        public:

            AnotherClass(){
                MyClass::MyEnum value = MyClass::X; 
            }
    };
};

int main(){

    return 1;
}

你也可以使用MyClass作为基类,但我怀疑你想做什么。

namespace Foo2 {
    using namespace Foo;
    class AnotherClass : public MyClass{
        public:
            AnotherClass(){
                MyEnum value = X; 
            }
    };
};

这也有一些很好的信息。 namespaces for enum types - best practices

答案 2 :(得分:1)

C ++ 03不支持完全限定enum类型,但它是MSVC扩展。 C ++ 0x将生成此标准,我相信您可以在C ++ 0x中using enum。但是,在C ++ 03中,我不相信你的问题可以解决。