为什么使用bind而不是函数调用?

Łuk*_*iak 6 c++ boost bind c++11

在这种情况下使用boost :: bind有什么好处

std::for_each(participants_.begin(), participants_.end(),
    boost::bind(&chat_participant::deliver, _1, boost::ref(msg)));
Run Code Online (Sandbox Code Playgroud)

代替

for(iterator actual = participants_.begin(); actual != participants_.end(); ++actual)
    (*actual)->deliver(msg);
Run Code Online (Sandbox Code Playgroud)



链接到整个代码(这是一个由boost教程提供的简单服务器示例).

use*_*679 8

我认为只是在C++ 11之前,算法通常被推荐用于大多数事情的简单for循环.从理论上讲,理解代码的目的更容易,因为您不必首先理解整个循环实现.for_each可能是一个极端,因为它的for循环实现将是最简单的.

在lambda函数之前,如果你想在不定义自定义函子的情况下使用算法,那么'boost :: bind'只是一个要求.

如今,使用基于范围的for循环,你只需这样做:

for (auto& participant : participants)
    participant->deliver(msg);
Run Code Online (Sandbox Code Playgroud)

虽然算法对于更复杂的循环仍然更好(特别是现在你不必使用'boost :: bind').