pp130に基づく
ただし、T と互換性のある型の比較をサポートするバージョンもあると便利です。これは、単にオーバーロードを追加する場合です。対称性のために、いずれかのタイプが操作の左側にあることを許可する必要があります。(これは、演算子を手動で追加するときに忘れがちです。右側が他の型を受け入れなければならないという事実だけを明確に理解する傾向があります。もちろん、less_than の 2 つの型のバージョンは、そのようなばかげた間違いを犯すことはありませんよね?)
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);
}
};
質問> 次の 2 つの機能を提供する必要がないのはなぜですか?
friend bool operator>(const T& lhs,const U& rhs) {
return rhs<lhs;
}
friend bool operator<(const T& lhs,const U& rhs) {
return rhs>lhs;
}