C++:有没有类似于“using namespace <namespace>”但是针对类的等价语句?

3
假设您有一个类,其中定义了一个枚举类型:
```html

假设您有一个类,其中定义了一个枚举类型:

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

有没有一种方法可以在不使用MyClass :: a引用它的情况下从另一个类访问值a?如果枚举包含在命名空间中而不是类中,则“using namespace;”解决了该问题 - 是否有一种类似的方法来处理类?


4
下划线后跟大写字母的名称被保留给编译器使用。 - GManNickG
由于您已将其声明为“ MyEnum”,因此它将是私有的,因此您将无法访问它。 - Graphics Noob
5个回答

4

我相信你被“MyClass::a”卡住了。另外...这样做不会违背将枚举放在类内的初衷吗?


根据using的使用场合而定。它可以在本地使用,例如在函数中:void func() { using MyClass::a; }。这将使得在函数外部引用“a”变得不可访问。因此,我认为这并不会使其失去意义。 - n1ckp

3
最好的做法是将单个符号放入类中。
class SomeClass {
    typedef MyClass::MyEnum MyEnum;
    MyEnum value;
};

请注意,如果typedef在类的公共部分,则任何人都可以将SomeClass::MyEnum引用为MyClass::MyEnum的同义词。

1

另一种方法是公开从一个Enum-holder类派生:

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; }

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

0

除非另一个类是MyClass的派生类(并且您的枚举是受保护/公共的),否则不行。我知道这不是一个答案,但我认为枚举在MyClass内部定义是有原因的,所以不要试图使其全局可用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接