如若一个类,当时设计的时候,没有重载某运算符
如果一个类,当时设计的时候,没有重载某运算符。
如果一个类,当时设计的时候,没有重载某运算符。
现在调用者发现,有这样的需求: 需要对2个对象之间毕竟比较。
尽管,我可以自己写函数来进行比较大小是否相同。
但会引起另一个问题:
两个对象,依然无法直接使用operator!=
这个运算符,我改怎么办?
如果作为调用者的我而言,直接使用我自己写的比较函数的话,代码不优雅,
无法应用std::equal ,或者boost 之类的高搭上的接口
------解决思路----------------------
只需要定义 operator <, 其他可以自行推导。
如果一个类,当时设计的时候,没有重载某运算符。
现在调用者发现,有这样的需求: 需要对2个对象之间毕竟比较。
尽管,我可以自己写函数来进行比较大小是否相同。
但会引起另一个问题:
两个对象,依然无法直接使用operator!=
这个运算符,我改怎么办?
如果作为调用者的我而言,直接使用我自己写的比较函数的话,代码不优雅,
无法应用std::equal ,或者boost 之类的高搭上的接口
------解决思路----------------------
只需要定义 operator <, 其他可以自行推导。
#include <iostream>
#define CMP_OP(Type) bool operator > (Type const& a, Type const & b){\
return b < a;\
}\
bool operator == (Type const& a, Type const& b){\
return !(a < b
------解决思路----------------------
b < a);\
}\
bool operator != (Type const& a, Type const& b){\
return a < b
------解决思路----------------------
b < a;\
}\
bool operator <= (Type const& a, Type const & b){\
return a < b
------解决思路----------------------
a == b;\
}\
bool operator >= (Type const& a, Type const & b){\
return a > b
------解决思路----------------------
a == b;\
}
struct Foo
{
int v;
};
bool operator < (Foo const& a, Foo const& b)
{
return a.v < b.v;
}
CMP_OP(Foo)
int main()
{
Foo a = {1};
Foo b = {2};
std::cout << std::boolalpha
<< (a < b) << std::endl
<< (a <= b) << std::endl
<< (a > b) << std::endl
<< (a >= b) << std::endl
<< (a == b) << std::endl
<< (a != b) << std::endl;
return 0;
}