C++ 为什么使用bind而不是函数调用?
在这种情况下使用boost::bind有什么好处C++ 为什么使用bind而不是函数调用?,c++,c++11,boost,bind,C++,C++11,Boost,Bind,在这种情况下使用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) (
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);
(这是boost教程提供的一个简单的服务器示例)。我认为这只是因为在C++11之前,对于大多数事情,算法通常被推荐用于普通for循环。从理论上讲,更容易理解代码的目的,因为您不必首先理解整个循环实现。对于_,每个都可能是一个极端,因为它的for循环实现是最简单的 在lambda函数之前,“boost::bind”只是一个要求,如果您想使用该算法而不定义自定义函子的话 现在,使用基于范围的for循环,您只需执行以下操作:
for (auto& participant : participants)
participant->deliver(msg);
不过,对于更复杂的循环,算法仍然更好(尤其是现在不必使用“boost::bind”)。这两种算法的作用相同<代码>boost::bind创建一个函数对象,它的工作原理主要类似于
C
中的函数指针。因此,问题可能是他们为什么要用C++
的方式来做这件事
C++
是一种面向对象的语言,它与标准库(STL)一起提供
数据结构(称为类),如容器(列表、集合、映射、迭代器概念等)和其他实用程序。它还提供用于该类的算法(查找、排序、筛选等)。因此,要使算法以统一的方式处理这些容器,容器必须遵循一些规则。std::for_每个
都是STL算法的一部分,所以它就是这样工作的。但是为什么
C++
的方式看起来不错呢