Boost.Bind 是一个库,它简化和概括了最初需要 std::bind1st() 和 std::bind2nd() 的功能。这两个函数被添加到 C++ 98 的标准库中,即使它们的签名不兼容,也可以连接函数。
Boost.Bind 被添加到 C++ 11 的标准库中。如果你的开发环境支持C++ 11,你会在头文件中找到函数std::bind()。根据用例,使用 lambda 函数或 Boost.Phoenix 可能比 std :: bind () 或 Boost.Bind 更好。
例 41.1。 std::for_each() 具有兼容功能
- #include
- #include
- #include
-
- void print(int i)
- {
- std::cout << i << '\n';
- }
-
- int main()
- {
- std::vector<int> v{1, 3, 2};
- std::for_each(v.begin(), v.end(), print);
- }
std::for_each() 的第三个参数是一个函数或函数对象,它需要一个唯一的参数。在示例 41.1 中,std :: for_each () 将容器 v 中的数字作为唯一参数一个接一个地传递给 print()。
如果你需要传入一个签名不符合算法要求的函数,那就更难了。例如,如果您希望 print() 接受一个输出流作为附加参数,则不能再将其与 std::for_each() 原样使用。
例 41.2。 std :: for_