假设您有一个在其中定义了枚举的类:
class MyClass {
typedef enum _MyEnum{ a } MyEnum;
}
有没有办法从另一个类访问值a而不必将其称为MyClass :: a?如果枚举包含在命名空间而不是类中,那么“使用命名空间”;解决了这个问题 - 有没有一种与类相同的方法呢?
答案 0 :(得分:4)
我很确定你会遇到“MyClass :: a”。另外......不会做这种打败的目的是将枚举放在一个类中吗?
答案 1 :(得分:3)
你能做的最好的事情就是将个别符号拉入课堂。
class SomeClass {
typedef MyClass::MyEnum MyEnum;
MyEnum value;
};
请注意,如果typedef位于班级的公开栏目中,则任何人都可以将SomeClass::MyEnum
称为MyClass::MyEnum
的同义词。
答案 2 :(得分:1)
另一种选择是公开派生自 Enum-holder -class:
struct Holder {
enum MyEnum { a };
};
class User : public Holder {
public:
// a now visible in class
MyEnum f() { return a; }
};
// a visible outside too
User::MyEnum f() { return User::a; }
答案 3 :(得分:0)
除非另一个类是MyClass的派生类(并且你的枚举是受保护的/公共的),否则。我知道这不是一个答案,但在我看来,枚举是在MyClass中定义的,所以不要试图让它全局可用。
答案 4 :(得分:0)
您可以按如下方式单独拉入每个常量:
class MyClass {
public:
// I added a value here intentionally to show you what to do with more than one enum value
typedef enum _MyEnum{ a, b } MyEnum;
}
using MyClass::a;
using MyClass::b;
//... likewise for other values of the enum