比较和对比: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中文网其他相关文章!