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

时间:2013-02-25 10:12:27

标签: c++

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

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语句转换

我希望(编辑)代码编译得很好。

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

2 个答案:

答案 0 :(得分:2)

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

尝试使用其他using或将static const E e = A::e添加到课程B

答案 1 :(得分:1)

这是使用C ++ 11的作用域语义的完美的C ++代码:

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