0

ベクトル操作のコードには、次のクラス テンプレート定義が含まれています。

template <class T>
class lt { 
    public: 
    static int compare(T a, T b) { return(a < b); } 
};
template <class T>
class gt { 
    public: 
    static int compare(T a, T b) { return(a > b); } 
};

しかし、なぜ?T余分な例外処理を使用しておらず、既に と を持っoperator<ているクラスのオブジェクトに依存していますoperator>。演算子を使用するのは簡単/簡単ではありませんか? それとも、比較のためにテンプレート クラスを使用する必要がありますか?

4

2 に答える 2

4

これらのテンプレートは、誰かが二項述語、つまり 2 つのパラメーターを取る自由な関数を期待するときにいつでも使用できます。オーバーロードされた関数は自由な二項関数として定義されない場合があるため、これらのテンプレートは一種のアダプターとして機能し、が解決できるoperator<限り、定義方法に関係なく既存の演算子を使用できます。 a < b

標準はすでに非常によく似た*テンプレートを提供していることに注意してください。std::lessこれらはおよびと呼ばstd::greaterれ、たとえば順序付けられた連想コンテナによって使用されます。

*) 標準ライブラリの述語は、それらがポインターでどのように機能するかについて追加の保証を提供します。

于 2013-07-26T09:05:45.137 に答える
0

問題は、比較が常に数値であるとは限らないということです。2 つのオブジェクトが比較され、より大きい小さいかが新しい定義を持つ場合があります。たとえば、タイプCoordinatesのオブジェクトを保持するクラスでは、カスタムの方法で比較を定義できます。例えば ​​:

Coordinate c1(3,5)
Coordinate c2(4,2)

をオーバーロードして、いつでもまたはいつでも> operatorTrue を返すことができますc1>c2c1.x > c2.xc1.y>c2.y

于 2013-07-26T09:39:54.497 に答える