我有以下枚举定义:
typedef enum MyEnumBase
{
VALUE0 = 0,
VALUE1,
VALUE2,
VALUE3
} MyEnum;
我的班级通过以下方式使用此枚举:
class MyClass {
public:
MyClass (MyEnum initvalue) {enum1 = initvalue;};
operator bool() {return (VALUE0 == enum1);};
operator MyEnum() {return (enum1);};
private:
MyEnum enum1;
};
主要功能:
int main(int agrc, char *argv[])
{
MyClass class1 = VALUE2;
bool OK = (VALUE0 == class1);
return 0;
}
它可以用 MS VC++ 2010 编译,但 Borland XE2 和 XE3 告诉我以下内容:
[bcc32 Error] test.cpp(26): E2015 Ambiguity between 'operator MyClass::bool()' and 'operator MyClass::MyEnumBase()'
我想这可能是模棱两可的 - 但另一方面,左侧参数是 MyEnum 类型,并且进行枚举转换而不是类的布尔转换是一种直截了当的方式。(正如 Visual Studio 所做的那样)
如果我交换参数(class1 == VALUE0),问题仍然存在。
可以将行修改为:
bool OK = (VALUE0 == (MyEnum)class1);
它会编译,但在那种情况下,我将不得不检查整个巨大的项目并“纠正”该类的每次使用——这不是一个好主意,因为这是我们的“错误变量”,它被过度使用了。
必须有一种更优雅的方式进行编译。有人有想法吗?