2011-05-24 20 views
2

iは下記参照のビューを持っていました。 誰も私がdifference.anの例をもっと知ることを知るために助けることができますか?bind1stとbind2nd

答えて

8

bind1stは、最初の引数(例えば、あなたがfoo(int a, int b)を持って、そしてbind1st(foo, 1)(bar)foo(1, bar)と同等になります)、bind2nd秒1をバインドします。ただし、それらを使用しないでください。一般的なboost::bind(またはC++ 0xではstd::bind)を使用してください。

+6

C++ 0xを持っていないか、またはブースト依存関係を持たせたくない場合は、かなり便利です。 –

+0

単項述語には限界がありましたが、functorにboost :: bindと組み合わせてboost :: functionを使用させたい場合は合意しました – AJG85

+2

@ChristianRau:だからこそ、役に立たない。ブーストを避けることはちょうど逆効果です。 –

3

関数オブジェクトf(x,y)と、変数が1つのみのFunctoidを必要とするアルゴリズムがあるとします。そして、二つの可能性があります:

  • yためのいくつかの固定値を設定し、その差だy

上のアルゴリズムの作業をx

  • xのためのいくつかの固定値を設定してください上のアルゴリズムの仕事を聞かせてみましょう。

  • 0

    これは明らかです。 bind1stは、ファンクタの最初のオペランドに値をバインドします(C++のファンクタが何であるかを知っていると仮定した場合)。bind2ndを2番目のオペランドにバインドします。しかし、交換可能演算子が+(またはstd::plus)の場合、実際には違いはありません(その例では、非可換性の動作で+をオーバーロードしなかった場合)。

    0

    bind1stは関数の最初のパラメータをバインドし、bind2ndは2番目のパラメータをバインドします。もしplus()functorのような操作をしても、2つの数値の加算はどちらの場合も同じですが、minus()のような操作を行うと、bind1stやbind2ndの使用に応じて違いが生じます。 4と4-5は異なる結果を生成します。今では、bind1stの最初のパラメータバインドとbind2ndの2番目のパラメータバインディングの違いがあります。

    関連する問題