C++關於tr1中繫結成員函式的bind使用
阿新 • • 發佈:2019-02-19
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;
}