ホームページ  >  記事  >  バックエンド開発  >  いつ選択するか: std::bind と C 0x のラムダ?

いつ選択するか: std::bind と C 0x のラムダ?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-30 15:21:121026ブラウズ

When to Choose: std::bind vs. Lambdas in C  0x?

比較と対照: C 0x の std::bind とラムダ

C 0x では、プログラマは、関数: std::bind とラムダ。どちらも異なる目的を果たしますが、一部のアプリケーションでは重複します。交差する機能の例を取り上げて、それぞれのアプローチの長所と制限を詳しく見てみましょう。

サイコロを振る関数を作成するタスクを考えてみましょう。ラムダを使用すると、これを次のように表現できます。

<code class="cpp">auto dice = [&]() { return distribution(engine); };</code>

また、std::bind を使用すると、次のように記述できます。

<code class="cpp">auto dice = bind(distribution, engine);</code>

モノモーフィック vs. ポリモーフィック

基本的な違いの 1 つは、型の動作にあります。ラムダは単相的です。つまり、コンパイル時に決定される固定の引数の型を持ちます。この制約により、対応するバインドに比べてラムダの柔軟性が制限されます。

たとえば、2 つの引数を出力する関数を考えてみましょう。

<code class="cpp">auto f = [](auto a, auto b) { cout << a << ' ' << b; }

このラムダを異なるパラメータ型で使用すると、コンパイラエラー。対照的に、std::bind ではポリモーフィックな動作が可能であり、関数をさまざまな型の引数にバインドできます。

<code class="cpp">struct foo {
  template <typename A, typename B>
  void operator()(A a, B b) {
    cout << a << ' ' << b;
  }
};

auto f = bind(foo(), _1, _2);</code>

関数が呼び出されるまで型推定を延期することで、std::bind はより高い柔軟性を提供します。多様な入力タイプを処理するため。

以上がいつ選択するか: std::bind と C 0x のラムダ?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。