枚举类的二义继承
enum class ambiguous inheritance
在使用强类型枚举时,我真的很纠结于继承问题——然而,在通过继承使用枚举时,这些枚举似乎是模棱两可的。
我使用g++ (GCC) 4.7.2
enum class AE { V1 };
enum class BE { V2 };
enum class CE { V3 };
struct A { void set(AE enumval) { } };
struct B { void set(BE enumval) { } };
struct C { void set(CE enumval) { } };
struct combined : A, B, C { };
struct all_in_one {
void set(AE enumval) { }
void set(BE enumval) { }
void set(CE enumval) { }
};
void function()
{
combined inherited_obj;
// compile errors - ambigious funtion call
inherited_obj.set(AE::V1);
inherited_obj.set(BE::V2);
inherited_obj.set(CE::V3);
all_in_one simple_obj;
// works like a charm...
simple_obj.set(AE::V1);
simple_obj.set(BE::V2);
simple_obj.set(CE::V3);
}
我找不到任何信息为什么它不应该这样工作。
两个函数必须在同一个作用域中,重载解析才能生效。您需要自己将它们带到一个公共作用域:
struct combined : A, B, C
{
using A::set;
using B::set;
using C::set;
};
或显式指定作用域:
inherited_obj.A::set(AE::V1);
inherited_obj.B::set(BE::V2);
inherited_obj.C::set(CE::V3);
相关文章:
- 不带大括号的枚举形式
- 枚举环境变量的惯用C++14/C++17方法
- 类似枚举的计算常量
- 如何正确实现和访问运算符的各种自定义枚举器
- 错误:从"int"到枚举c++的转换无效
- C++中构造函数中的枚举
- 访问在 C++ 结构中声明的枚举变量
- 枚举类'classname'的多重定义
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- typedef 枚举和枚举类有什么区别?
- 为什么我的开关/机箱在使用枚举时默认?
- 标准::可选枚举的比较运算符
- C++两个源文件之间共享的枚举的静态实例
- 打印没有铸件的枚举可以在C++中吗?
- 枚举成员与静态 int 成员?
- C++:枚举:错误:应使用标识符而不是"}"
- 继承只是为了分享枚举 - 危险
- 继承类之间的枚举的最佳实践是什么?
- 从基元类型继承的枚举
- 枚举类的二义继承