模板重载的C ++模糊运算符

时间:2016-11-10 15:41:52

标签: c++ templates operator-overloading

我遇到运营商重载问题:
我想用这样的运算符编写一个类:

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);
};

如果我想编写运算符重载,以便它可以执行所有这些操作:

  • 任何类型== BigNum
  • BigNum ==任何类型
  • BigNum == BigNum

我该如何解决?谢谢。

1 个答案:

答案 0 :(得分:1)

我建议删除一个成员==模板,并为operator==提供三个非成员重载 - 两个模板化,一个在左侧BigNum,另一个在其上右边;和一个非模板化的,双方都有BigNum