C++ C++;:相当于;使用名称空间<;名称空间>&引用;但是上课呢?

C++ C++;:相当于;使用名称空间<;名称空间>&引用;但是上课呢?,c++,enums,namespaces,C++,Enums,Namespaces,假设您有一个定义了枚举的类: class MyClass { typedef enum _MyEnum{ a } MyEnum; } 有没有一种方法可以从另一个类访问值a,而不必将其称为MyClass::a?如果枚举包含在一个名称空间而不是一个类中,那么“使用名称空间”就解决了这个问题——有没有一种与类相同的方法来实现这一点?我敢肯定,您会一直使用“MyClass::a”。也。。。这样做会不会挫败将枚举放在类中的初衷?您最好将单个符号拉入类中 class SomeClass { t

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

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

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

我敢肯定,您会一直使用“MyClass::a”。也。。。这样做会不会挫败将枚举放在类中的初衷?

您最好将单个符号拉入类中

class SomeClass {
    typedef MyClass::MyEnum MyEnum;
    MyEnum value;
};

请注意,如果typedef位于类的公共部分,则任何人都可以将
SomeClass::MyEnum
称为
MyClass::MyEnum

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

另一种方法是公开从枚举持有者类派生:


您可以按如下方式单独拉入每个常数:

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

下划线后跟大写字母是为编译器保留的名称。正如您所声明的,“MyEnum”将是私有的,因此您将无法访问它,具体取决于使用的位置。它可以在本地使用,例如在一个函数中:void func(){using MyClass::a;}。这无法通过引用函数外部的“a”来访问它。所以不,我不认为这会挫败目的。
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