1

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

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公开
  • 我不想要一个巨大的 switch-case 语句来在新枚举BA::E

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

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

4

2 回答 2

2

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

尝试附加using或添加static const E e = A::e到 class B

于 2013-02-25T10:16:56.747 回答
1

这是使用 C++11 范围语义的完美 C++ 代码:

int main()
{
    B::E enum1; // okay
    enum1 = B::E::e; // also okay
}
于 2013-03-04T20:45:56.670 回答