我有运算符重载的问题:
我想用这样的运算符写一个类:

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;

它将得到编译器错误:



而且如果我改变了,也会有同样的问题
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

  • 我该如何解决?谢谢。

    最佳答案

    我建议删除一个成员==模板,只为operator==提供三个非成员重载-两个模板化,一个在左边带有BigNum,另一个在右边;另一面是非模板的,两侧都带有BigNum

    关于c++ - 模板重载的C++模糊运算符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40531502/

    10-15 17:22