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

时间:2011-06-10 03:07:23

标签: c++ class enums c++11

class A {
  public: enum class { HELLO, WORLD };
};

众所周知,在class内,声明一个简单的enum(而不是enum class)是一个更好的主意,因为它已经使用class标识进行了输入。但仍然以上语句是有效的C++0x签名。现在如何在外面访问未命名的enum class

int i = A::HELLO; // error: ‘HELLO’ is not a member of ‘A’

1 个答案:

答案 0 :(得分:8)

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

  

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

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

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

  

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