以前声明为受保护的枚举的访问枚举器

Access enumerator of an enum formerly declared as protected

本文关键字:枚举 访问 受保护 声明      更新时间:2023-10-16

对于我的项目,我想扩大以前在基类中声明为受保护的枚举的可见性。

class A { 
protected:
    enum E { e = 0 };
};
class B : public A { 
public:
    using A::E;
};
int main()
{
    B::E enum1; // okay
    enum1 = B::e; // fails: test.cpp:3:14: error: A::E A::e is protected
}

原因很简单:

  • 我不控制基类,因此我不能只公开E
  • 我不想在BA::E中的新枚举之间转换一个巨大的switch case语句

我希望代码编译得很好。

我很好奇。代码编译失败的科学解释是什么?

A::E公开不会影响枚举器的名称,因此e仍然受到保护。

尝试使用额外的using或将static const E e = A::e添加到类B中。

这是一个完全合理的C++代码,使用C++11的作用域语义:

int main()
{
    B::E enum1; // okay
    enum1 = B::E::e; // also okay
}