更新时间:2015-11-21 19:10:03浏览次数:1+次
本库Boost.Ref通常与 Boost.Bind一起使用,所以我把它们挨着写。它提供了两个函数:boost::ref()和 boost::cref(),都定义于 boost/ref.hpp。
当要用于boost::bind()的函数带有至少一个引用参数时,Boost.Ref就很重要了。 由于boost::bind()会复制它的参数,所以引用必须特别处理。
#include <boost/bind.hpp>
#include <iostream>
#include <vector>
#include <algorithm>
void add(int i, int j, std::ostream &os)
{
os << i + j << std::endl;
}
int main()
{
std::vector<int> v;
v.push_back(1);
v.push_back(3);
v.push_back(2);
std::for_each(v.begin(), v.end(), boost::bind(add, 10, _1, boost::ref(std::cout)));
}
以上例子使用了上一节中的add()函数。 不过这一次该函数需要一个流对象的引用来打印信息。 因为传给boost::bind()的参数是以值方式传递的,所以std::cout不能直接使用,否则该函数会试图创建它的一份拷贝。
通过使用模板函数boost::ref(),象std::cout这样的流就可以被以引用方式传递,也就可以成功编译上面这个例子了。
要以引用方式传递常量对象,可以使用模板函数boost::cref()。
相关资讯