首页  >  文章  >  后端开发  >  何时选择:std::bind 与 C 0x 中的 Lambda?

何时选择:std::bind 与 C 0x 中的 Lambda?

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 和 Lambda

在 C 0x 中,程序员面临两种选择来捕获函数:std::bind 和 lambda。虽然两者都有不同的用途,但它们在某些应用中存在重叠。让我们以交叉功能为例,深入研究每种方法的优点和局限性。

考虑创建掷骰子函数的任务。使用 lambda,我们可以将其表示为:

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

或者,使用 std::bind,我们可以编写:

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

单态与多态

一个根本的区别在于它们的类型行为。 Lambda 是单态的,这意味着它们具有在编译时确定的固定参数类型。与绑定对应项相比,此约束限制了 lambda 的灵活性。

例如,考虑一个打印两个参数的函数:

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

将此 lambda 与不同的参数类型一起使用将导致编译器错误。相反,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 中的 Lambda?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn