如何访问封装在类中的未命名"enum class"?

How to access unnamed "enum class" encapsulated inside a class?

本文关键字:未命名 enum class 何访问 访问 封装      更新时间:2023-10-16
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’

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

除非用于声明友元(11.3(或将基类成员的名称引入派生类(7.3.3(,否则成员声明声明该类的成员,并且每个此类成员声明应声明该类至少一个成员名称。

在您的情况下,类的作用域中没有引入枚举器名称,也没有引入枚举名称。因此,该成员声明根本没有引入任何成员名称。

编辑:实际上,有一个更直接的禁止列举声明。7.2p2:

在作用域枚举的声明中,不应省略可选的标识符