1. 程式人生 > >C++關於tr1中繫結成員函式的bind使用

C++關於tr1中繫結成員函式的bind使用

 std::tr1::bind()模板函式的使用

通過上面的std::tr1::function 可以對靜態成員函式進行繫結,但如果要對非靜態成員函式的繫結,需用到下面將要介紹的bind()模板函式.

首先說bind的用法,其宣告如下所示:

bind(Function fn, T1 t1, T2 t2, …, TN tN);

其中fn為將被呼叫的函式,t1…tN為函式的引數。如果不指明引數,則可以使用佔位符表示形參,點位符格式為

std::tr1::placehoders::_1, std::tr1::placehoders::_2, …, std::tr1::placehoders::_N

將上例中Rectangle::onEvent(int param)前的static

去掉改為非靜態成員函式,則進行動態繫結使得程式正常執行,將Rectangle::initial(void)的定義修改為:

void Rectangle::initial(){

sharp.handlerEvent = std::tr1::bind(&Rectangle::onEvent,this,std::tr1::placeholders::_1/*因onEvent函式需要一個引數,所以用一佔位符*/);

std::cout << "invode initial function!" << std::endl;

}