C でのラムダとバインド: ポリモーフィズムと効率
同様のタスクに対する C 0x ラムダと std::bind の使用法を比較する場合2 つの間の選択は、ポリモーフィズムや効率などの要因によって影響を受ける可能性があります。
バインドとラムダの詳細
ラムダとバインドの両方が使用される次の例を考えてみましょう。分布とエンジンを使用して乱数を生成するために使用されます:
// Using lambda auto dice = [&]() { return distribution(engine); }; // Using bind auto dice = bind(distribution, engine);
多態性
単相的な (つまり、固定型を持つ) ラムダとは異なり、 std::bind は多態性を許可します。行動。これは、次に示すように、bind を使用して未知の型の関数を作成できることを意味します。
struct foo { typedef void result_type; templatevoid operator()(A a, B b) { cout この例では、a と b の型は、f が呼び出された実行時に推定されます。この柔軟性はラムダでは利用できません。
効率
一般に、キャプチャされた変数が値によって使用される場合、ラムダはバインドより効率的になる傾向があります。これは、ラムダが変数を直接キャプチャするのに対し、bind はキャプチャされた変数を参照するクロージャ オブジェクトを作成するためです。ただし、キャプチャされた変数が大きい場合、または関数が頻繁に呼び出される場合には、バインドの方が利点がある場合があります。
結論
ラムダとバインドのどちらを選択するかは、特定の要件によって異なります。アプリケーションの。ラムダはポリモーフィズムを提供し、小さな値型の変数を効率的にキャプチャできます。バインドは柔軟性が高く、大規模な関数や頻繁に呼び出される関数を扱う場合に適しています。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3