C ++如何重载关系运算符以检查两个对象是否相同?

时间:2017-11-02 01:46:08

标签: c++ oop comparison-operators

我正在尝试重载关系运算符(==,>,<,> =,< =),但我希望能够在两个对象不同的情况下返回false,而不是返回错误。例如,我有一个ArrayList类和一个当前无法比较的Vector类。我怎么能做到这一点?

1 个答案:

答案 0 :(得分:1)

尝试类似的事情:

#include <iostream>

class ArrayList {};
class Vector {};

bool operator==(Vector const &v, ArrayList const &al) { return false; }
bool operator==(ArrayList const &al, Vector const &v) { return false; }

int main()
{
    ArrayList al;
    Vector v;

    std::cout << (al == v ? "true" : "false") << std::endl;
    std::cout << (v == al ? "true" : "false") << std::endl;

    return 0;

}

两种比较都会打印错误;

编辑使用模板:

#include <iostream>
#include <type_traits>

class ArrayList {};
class Vector {};
class Whatever {};

template <class T, class U> bool operator==(T const &, U const &) 
{ 
    return std::is_same<T, U>::value;
}


int main()
{

    ArrayList al;
    Vector v;
    Whatever w;

    std::cout << (al == v ? "true" : "false") << std::endl;
    std::cout << (v == al ? "true" : "false") << std::endl;
    std::cout << (w == v ? "true" : "false") << std::endl;
    std::cout << (w == w ? "true" : "false") << std::endl;

    return 0;

}

如果类相同则返回true,否则返回false。