我非常了解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;
答案 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中,我不相信你的问题可以解决。