当前位置:C++技术网 > 资讯 > Boost简单学习:7 函数对象Boost.Ref

Boost简单学习:7 函数对象Boost.Ref

更新时间: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()。