C ++:相当于“using namespace <namespace>”,但对于类?</namespace>

时间:2009-11-12 00:52:14

标签: c++ enums namespaces

假设您有一个在其中定义了枚举的类:

class MyClass {
  typedef enum _MyEnum{ a } MyEnum;
}

有没有办法从另一个类访问值a而不必将其称为MyClass :: a?如果枚举包含在命名空间而不是类中,那么“使用命名空间”;解决了这个问题 - 有没有一种与类相同的方法呢?

5 个答案:

答案 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