0

次のテンプレート関数に出くわしました。

template<typename C, typename F = less<typename C::value_type>> void Sort(C& c, F f = F()){
    sort(C.begin(),c.end(),f);
}

今、私はlessを探します。

最初の引数が 2 番目の引数より小さいかどうかを返す (演算子 < によって返される) 二項関数オブジェクト クラス。

上記の関数では、less の使用は何ですか? 引数は 1 つだけです。

ありがとう。

4

2 に答える 2

4

いいえless、1 つの引数がありません。1 つのテンプレート パラメータがあります。これは 1 つの引数と同じではありません。また、関数ではなくクラスです。より正確には、関数として使用できるようにfunctor、オーバーロードされた演算子を持つクラスです。()

このような実装を検討してください

template<class T>
struct less 
{   
    bool operator()(const T& left, const T& right) const
    {
        return (left < right);
    }
};

less<int>として呼び出すことができます

less<int> f;
f(a,b);

ここで、a と b はints です。

したがって、テンプレート パラメータは 1 つ (T == int) ですが、引数は 2 つ (int left & int right) あります。

于 2013-10-29T07:08:52.900 に答える
2

less の使用とは何ですか? 引数は 1 つだけです。

いいえ、テンプレート パラメータは 1 つだけです。実際の関数呼び出し自体は、テンプレート パラメーターで指定された型の (const は IIRC を参照する) 2 つの引数を取ります。

于 2013-10-29T07:11:56.610 に答える