【问题标题】:How to access unnamed "enum class" encapsulated inside a class?如何访问封装在类中的未命名“枚举类”?
【发布时间】:2011-09-12 04:40:40
【问题描述】:
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’

【问题讨论】:

  • 它只是不能从未命名的枚举类中直接编译:D

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


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 这意味着我们不能在构造函数中初始化它的对象。所以这样的enum 将与外部世界完全脱节,对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-22
相关资源
最近更新 更多