C におけるラムダとバインド : ポリモーフィズムと効率
同様のタスクに対する C 0x ラムダと std::bind の使用法を比較する場合
バインドとラムダの詳細
ラムダとバインドの両方が含まれる次の例を考えてみましょう。分布とエンジンを使用して乱数を生成するために使用されます:
// Using lambda auto dice = [&]() { return distribution(engine); }; // Using bind auto dice = bind(distribution, engine);
多態性
単相的な (つまり、固定型を持つ) ラムダとは異なり、std: :bind はポリモーフィックな動作を可能にします。これは、以下に示すように、bind を使用して未知の型の関数を作成できることを意味します。
struct foo { typedef void result_type; template <typename A, typename B> void operator()(A a, B b) { cout << a << ' ' << b; } }; auto f = bind(foo(), _1, _2); f("test", 1.2f); // will print "test 1.2"
この例では、a と b の型は、f が呼び出された実行時に推定されます。この柔軟性はラムダでは利用できません。
効率
一般に、キャプチャされた変数が値によって使用される場合、ラムダはバインドより効率的になる傾向があります。これは、ラムダが変数を直接キャプチャするのに対し、bind はキャプチャされた変数を参照するクロージャ オブジェクトを作成するためです。ただし、キャプチャされた変数が大きい場合、または関数が頻繁に呼び出される場合には、バインドの方が利点がある場合があります。
結論
ラムダとバインドのどちらを選択するかは、特定の要件によって異なります。アプリケーションの。ラムダはポリモーフィズムを提供し、小さな値型の変数を効率的にキャプチャできます。バインドは柔軟性が高く、大規模な関数や頻繁に呼び出される関数を処理する場合に適しています。
以上がC におけるラムダとバインド: それぞれをいつ選択する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。