私はそのようなコードを持っています
class Number
{
int m_value;
public :
Number(const int value) :
m_value(value)
{
}
operator const int() const
{
return m_value;
}
int GetValue() const
{
return m_value;
}
};
bool operator==(const Number& left, const Number& right)
{
return left.GetValue() == right.GetValue();
}
class Integer
{
int m_value;
public :
Integer(const int value) :
m_value(value)
{
}
operator const int() const
{
return m_value;
}
bool operator==(const Integer& right) const
{
return m_value == right.m_value;
}
bool operator==(const int right) const
{
return m_value == right;
}
int GetValue() const
{
return m_value;
}
};
bool operator==(const int left, const Integer& right)
{
return left == right.GetValue();
}
int main()
{
Number n1 = 1;
Number n2 = 1;
int x3 = 1;
n1 == n2;
n1 == x3; // error C2666: 'operator ==' : 3 overloads have similar conversions
x3 == n1; // error C2666: 'operator ==' : 2 overloads have similar conversions
Integer i4 = 1;
Integer i5 = 1;
i4 == i5;
i4 == x3;
x3 == i4;
return 0;
}
クラスについてNumber
は、上記のコードに示すように 2 つのエラーがあります。クラスについてInteger
は、すべて問題ありません。問題は、単一パラメーターのコンストラクター、キャスト演算子、等価演算 ( MyClass == int
、int == MyClass
、 ) を結果のクラスに保持したいのですが、 as の 1 つのバージョンのみをクラスMyClass == MyClass
に実装したいということです。これを行う方法がわかりません。それは可能ですか、それともクラスのように3つすべての実装が必要ですか? これらのエラーが発生する理由はわかっていますが、私が持っているソリューションが気に入らないだけです。operator==
Number
Integer