1

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; 
  }
4

1 に答える 1

1

このオペレーター:

friend bool operator>=(const T& lhs,const U& rhs) { 
  return !(lhs<rhs); 
}

関数呼び出しの有効性に依存しますlhr<rhs。2 回目の署名を提供してoperator<(const T&, const U&)も意味がありません (それは間違っています)。

同じことが 2 番目の過負荷にも当てはまります。

于 2012-04-07T14:55:59.807 に答える