为什么要使用绑定(bind)而不是函数调用(function call)?

6
2个回答

8
我认为这是因为在 C++11 之前,算法通常比普通的 for 循环更推荐使用。理论上,这样更容易理解代码的目的,因为你不必先理解整个循环实现。for_each 可能是一个极端情况,因为它的 for 循环实现是最简单的。
在 lambda 函数出现之前,如果你想使用算法而不定义自定义函数对象,则必须使用 'boost::bind'。
现在,使用基于范围的 for 循环,你只需这样做:
for (auto& participant : participants)
    participant->deliver(msg);

尽管如今无需使用“boost :: bind”,但对于更复杂的循环,算法仍然更为优秀。


2
两者都可以完成同样的工作。 boost :: bind 创建一个函数对象,它在大多数情况下像C中的函数指针一样工作。那么问题可能是为什么要以C ++ 方式进行操作。
C ++ 是面向对象的语言,它配备了标准库(STL),其中提供了几个数据结构(称为类),例如容器(列表,集合,映射,迭代器概念等)和其他实用程序。 它还提供可用于该类的算法(查找,排序,过滤等)。 因此,为了使算法以统一的方式与这些容器一起使用,容器必须遵循某些规则。
std :: for_each 是STL算法的一部分,因此��的工作方式如此。
但是为什么C ++ 方式看起来不错呢?
  1. 正如@user673679所说,我们不再关注实现循环。
  2. 传统上,循环会创建内部块,有时难以跟踪逻辑。
  3. 您可以重复使用单个元素上的函数工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接