我遇到运营商重载问题:
我想用这样的运算符编写一个类:
class BigNum
{
public:
template<class T>
bool operator==(const T &input);
template<class T>
friend bool operator==(const T &A,BigNum & B);
};
可以打电话:
BigNum A;
int a;
A==a;
a==A;
但是在打电话时:
BigNum A,B;
A==B;
它将收到编译器错误:
[错误]&#39;运营商的错误重载==&#39; (操作数类型是&#39; BigNum&#39;和&#39; BigNum&#39;)
[注意] bool BigNum :: operator ==(const T&amp;)[with T = BigNum]
[注意] bool operator ==(const T&amp;,BigNum&amp;)[with T = BigNum]
如果我改变
也会出现同样的问题template<class T>
bool operator==(const T &input);
到
bool operator==(const BigNum &input);
但如果运算符重载是这样的(但它不能Any type==BigNum
),那就没关系了:
class BigNum
{
public:
bool operator==(const BigNum &input);
template<class T>
bool operator==(const T &input);
};
如果我想编写运算符重载,以便它可以执行所有这些操作:
我该如何解决?谢谢。
答案 0 :(得分:1)
我建议删除一个成员==
模板,并为operator==
提供三个非成员重载 - 两个模板化,一个在左侧BigNum
,另一个在其上右边;和一个非模板化的,双方都有BigNum
。