我有这样的代码
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
,我有两个错误,如上面的代码所示。上课Integer
一切正常。问题是,我想保留生成的类单参数构造函数、强制转换运算符和相等操作(MyClass == int
, int == MyClass
, MyClass == MyClass
),但我只想operator==
在 class 中实现 as 的一个版本Number
。我看不出有什么方法可以做到这一点。这是否可能,或者我必须在课堂上拥有所有三个实现Integer
?我知道为什么会出现这些错误,我只是不喜欢我拥有的解决方案。