天天看點

C++ boost::bind的了解

boost::bind   的原理是  函數對象

函數對象:重載了( )操作符的對象

function_name()   // 調用function_name這個對象   的    ()方法,而非調用一個叫function_name的函數方法。

template<class R,class F> bind(F f);

template<class R,class F,class A1> bind(F f , A1 a1);

namespace

{

boost::arg<1> _1;

boost::arg<2> _2;

boost::arg<3> _3;

…..                                     //其他6個占位符

};

boost::bind接收的第一個參數必須是一個可調用的對象f,包括函數、函數指針、函數對象、和成員函數指針,之後bind最多接受9個參數,參數數量必須與f的參數數量相等

這些參數被傳遞給f作為入參。 綁定完成後,bind會傳回一個函數對象,它内部儲存了f的拷貝,具有operator(),傳回值類型被自動推導為f的傳回類型。在發生調用時這個函數對象将把之前存儲的參數轉發給f完成調用

boost::bind(函數名, 參數1,參數2,...)

boost::bind(&類名::方法名,類執行個體指針,參數1,參數2)

void function_name(int a, int b, int c)

boost::bind(function_name, 1, _1, _2)得到一個函數對象bind_ret_func_obj,當我們調用bind_ret_func_obj(9,46)時,相當于調用function_name(1,3,46)

boost::bind(function_name, _2, 3, _1)得到一個函數對象bind_ret_func_obj,當我們調用bind_ret_func_obj(8,7)時,相當于調用function_name(7,3,8)

_x這樣的就是占位符,_1表示實際調用時的第一個參數的位置,也即bind_ret_func_obj(8,7)時_1代表第一個參數8,_2代表第二個參數7

類名::方法名的例子similarly