如何访问封装在类中的未命名"枚举类"?

iam*_*ind 5 c++ enums class c++11

class A {
  public: enum class { HELLO, WORLD };
};
Run Code Online (Sandbox Code Playgroud)

知道了,在a里面class,声明一个简单的enum(而不是enum class)是一个更好的主意,因为它已经用class标识键入了.但仍然以上声明是有效的C++0x签名.现在如何访问一个未命名的enum class外部?

int i = A::HELLO; // error: ‘HELLO’ is not a member of ‘A’
Run Code Online (Sandbox Code Playgroud)

Joh*_*itb 10

实际上,这是无效的.C++ 0x FDIS说(9.2p1)

除了用于声明朋友(11.3)或将基类成员的名称引入派生类(7.3.3)之外,成员声明声明该类的成员,并且每个此类成员声明至少应声明该类的一个成员名称.

在您的情况下,类的范围中不会引入枚举器名称,也不会引入枚举名称.因此,该成员声明根本不会引入任何成员名称.

编辑:实际上,更直接禁止枚举声明.7.2p2:

在范围枚举的声明中不应省略可选标识符.