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