なぜ私はこれを行うことができます:
stable_sort(it1, it2, binary_function);
しかし、これではありません:
priority_queue<type, vector<type>, binary_function> pq;
最初のケースで関数を使用できるのに、2番目のケースではオブジェクトが必要なのはなぜですか?
なぜ私はこれを行うことができます:
stable_sort(it1, it2, binary_function);
しかし、これではありません:
priority_queue<type, vector<type>, binary_function> pq;
最初のケースで関数を使用できるのに、2番目のケースではオブジェクトが必要なのはなぜですか?
priority_queue
はテンプレートであり、引数として型を想定しています。ここで、はbinary_function
関数オブジェクトです。
のリファレンスをチェックすると、提供したものも関数オブジェクトstd::stable_sort
であることがわかりますbinary_function
... 2番目のケースでは適切な「キャスト」または変換がないことを除いて、2つの間に違いはありません。関数から適切な関数オブジェクトに作成されます。
これは、関数がファンクターを直接、そしてすぐに使用するためであると考えられます*sort
。したがって、*sort
関数が呼び出されたときに関数アドレスが有効である場合、関数呼び出しの間有効になります。これをデータメンバーとして(本質的に)使用するコンテナーを作成する場合、コンテナーオブジェクトの存続期間中に関数参照が無効になるかどうかを確認することはできません。ゆるい手振りの説明だとは思いますが、私が思いつくのは最高です。おそらくC++では、バイナリ関数への参照は暗黙的にaの構造に変換されるstd::function
ため、関数は「コピー」され、有効性の問題は発生しません。
私は今あなたを失っていないことを願っています...