在这种情况下使用boost :: bind有什么好处
std::for_each(participants_.begin(), participants_.end(),
boost::bind(&chat_participant::deliver, _1, boost::ref(msg)));
而不是
for(iterator actual = participants_.begin(); actual != participants_.end(); ++actual)
(*actual)->deliver(msg);
Link to the whole code(这是一个由boost教程提供的简单服务器示例)。
答案 0 :(得分:8)
我认为只是在C ++ 11之前,算法通常被推荐用于大多数事情的简单for循环。从理论上讲,理解代码的目的更容易,因为您不必首先理解整个循环实现。 for_each可能是一个极端,因为它的for循环实现将是最简单的。
在lambda函数之前,如果你想在没有定义自定义函子的情况下使用算法,'boost :: bind'只是一个要求。
如今,使用基于范围的for循环,您只需执行此操作:
for (auto& participant : participants)
participant->deliver(msg);
虽然算法对于更复杂的循环仍然更好(特别是现在你不必使用'boost :: bind')。
答案 1 :(得分:2)
他们两人都做同样的工作。 boost::bind
创建一个函数对象,它的作用大致类似于C
中的函数指针。所以问题可能就是为什么他们以C++
方式做到这一点
C++
是一种面向对象的语言,它带有标准库(STL),它提供了几种
数据结构(称为类),如容器(列表,集合,映射,迭代器概念等)和其他实用程序。它还提供了适用于该类的算法(查找,排序,过滤..等)。因此,对于以统一方式使用这些容器的算法,容器必须遵循一些规则
std::for_each
是STL算法的一部分,因此它的工作方式也是如此
但为什么C++
方式看起来不错?