基于pp130
然而,拥有支持的版本会很高兴 T和兼容类型之间的比较,这只是一个例子 添加更多重载。 对于对称性,您需要允许任何一种类型 在操作的左侧。 (这很容易忘记 手动添加运算符;人们往往只能清楚地看到这一事实 右边必须接受另一种类型。当然,你的两种类型 less_than的版本不会犯这么愚蠢的错误,对吗?)
template <class T,class U>
class less_than2
{
public:
friend bool operator<=(const T& lhs,const U& rhs) {
return !(lhs>rhs);
}
friend bool operator>=(const T& lhs,const U& rhs) {
return !(lhs<rhs);
}
friend bool operator>(const U& lhs,const T& rhs) {
return rhs<lhs;
}
friend bool operator<(const U& lhs,const T& rhs) {
return rhs>lhs;
}
friend bool operator<=(const U& lhs,const T& rhs) {
return !(rhs<lhs);
}
friend bool operator>=(const U& lhs,const T& rhs) {
return !(rhs>lhs);
}
};
问题&GT;为什么我们不必提供以下两个功能?
friend bool operator>(const T& lhs,const U& rhs) {
return rhs<lhs;
}
friend bool operator<(const T& lhs,const U& rhs) {
return rhs>lhs;
}
答案 0 :(得分:1)
此运算符:
friend bool operator>=(const T& lhs,const U& rhs) {
return !(lhs<rhs);
}
取决于函数调用lhr<rhs
的有效性。通过operator<(const T&, const U&)
提供第二次签名没有意义(甚至是错误的)。
同样适用于第二次过载。