【发布时间】:2013-02-25 10:12:27
【问题描述】:
对于我的项目,我想扩大以前在基类中声明为受保护的枚举的可见性。
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 - 我不想在
B和A::E中的新枚举之间转换一个巨大的switch-case 语句
我希望(ed)代码编译得很好。
我很好奇。代码编译失败的科学解释是什么?
【问题讨论】:
-
发布后 我注意到stackoverflow.com/questions/9814074/… 给出了足够好的推理。使用普通的 C++03 枚举不会引入新的范围,因此 enumerators 仍然会进入周围的范围。当然,定义“使用
A::E”并不会改变这一事实,只会使枚举本身公开,而不是名称。
标签: c++