次の Enum 定義があります。
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);
そしてそれはコンパイルされますが、その場合、巨大なプロジェクト全体を調べて、クラスのすべての使用を「修正」する必要があります-これは「エラー変数」であるため、あまり良い考えではありません。
これをコンパイルするもっと洗練された方法があるはずです。誰にもアイデアがありますか?