以前声明为受保护的枚举的访问枚举器
Access enumerator of an enum formerly declared as protected
对于我的项目,我想扩大以前在基类中声明为受保护的枚举的可见性。
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语句
我希望代码编译得很好。
我很好奇。代码编译失败的科学解释是什么?
将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
}
相关文章:
- 如何正确实现和访问运算符的各种自定义枚举器
- 访问在 C++ 结构中声明的枚举变量
- 如何确保 Visual C++ 不允许作用域枚举访问?
- 通过包装器从 C 访问C++ API 时,如何访问枚举类型
- 从类访问枚举成员
- 如何通过索引访问枚举类
- 在类访问混淆中声明的枚举类型
- 如何访问 VTK 的类枚举字段
- C++ 如何访问内部枚举类?
- 如何将枚举类写入文件并在C++中访问它?
- 访问向量字段的键 - 枚举类还是命名空间中的枚举?
- 枚举范围无法通过 C++ 中的类中的结构访问
- 为什么 clang 不允许通过实例访问嵌套枚举类?
- 通过进程模块C 枚举时,访问被拒绝
- 访问在C++类中声明的枚举
- 我的私有方法如何在C++中访问公共枚举
- C++中枚举访问语义背后的基本原理
- 不同类中的枚举访问
- 通过作用域和类型化枚举访问元组值失败
- 是否可以使用枚举访问数组