boost bind function用法說明

2021-06-26 17:47:50 字數 3154 閱讀 8251

目錄(?)

[+]

(1)標頭檔案

bind

函式#include /

bind.hpp>

function

使用標頭檔案

#include

如果寫程式時出錯則在

function

及bind

前面加上限定:

"boost::"

(2)功能

bind

繫結乙個函式及其引數.

function

是類和模板的組合,它定義的物件可以指向乙個函式

(包裝乙個函式

),類似乙個函式指標。既可以直接指向乙個函式也可以接收

bind

的返回值。

(3)返回值

bind返回乙個函式物件。

function本身是一種類模板,可被看作宣告的關鍵字。

【bind】

一般用法:bind用於一般普通函式( 以非類、結構的成員函式 )具有多種形式,但用法簡單。

用於類、結構的成員函式:bind用於成員函式時必須要在引數列表中指出成員函式在所屬的類中的位址,成員函式所屬物件,讓bind知道此成員函式所屬類位址和呼叫此成員函式的類物件。除了這兩點額外的要求後,使用形式跟一般用法一致。

【function】

一般用法:function用於一般函式的情況下,只需要按照一般函式的 「返回值」,「引數列表( 引數列表用括號括起來,彼此用逗號隔開 )」來宣告物件,然後指向對應的函式位址(函式名)

用於成員函式:單用function來包裝類的成員函式,需要按照函式 「返回值」,「類指標型別和引數列表(類指標型別和餐宿列表在括號中,彼此用逗號隔開)」來宣告function物件。在呼叫被包裝的函式時,必須要事先定義乙個類物件將其位址傳入,與宣告function物件時的第乙個類指標引數相對應。讓function物件知道函式的所屬位址及具體呼叫成員函式類物件。

【bind & function】

不管是針對一般的函式還是針對類成員函式,都不可以使用佔位符來作為bind的引數,因為用function呼叫包裝函式的時候會報引數不對應的錯誤。另外bind的返回一定要是乙個函式位址而不是呼叫函式的形式。

在針對類成員函式的時候,function物件可以不再有類和物件的位址。因為bind已經將二者包裝了。

二者的其它用法跟其單獨使用時的規則大同小異。

void 

print( int i, int j )

[1]全引數繫結

bind(print, 3, 4)();

輸出3       4

[2]部分引數繫結

bind( print, 3, _1)(4);//使用佔位符給呼叫函式傳參占個位置:傳入4

輸出3       4

[3]所有引數都不繫結

bind(print, _1, _2)(3, 4);

輸出3       4

bind(print, * ,* );*表示引數,返回的是print函式,加在行尾加"()"表示呼叫print函式。

bind在用於成員函式時,除了函式位址的重要性之外,還要知道具體是哪乙個物件在呼叫類中的成員函式。如果是在類中的成員函式中呼叫另外乙個成員函式這個物件可以被宣告為this。

class myfun

};myfun f;

boost::bind(&myfun::print,f, 3, 4)();

要用bind繫結類類中的成員函式時,第乙個引數表示成員函式的所在類的位址,第二個引數表示具體呼叫此成員函式的物件。後面的引數跟bind用於一般函式的用法一致。

針對於一般設計的函式( 非類和結構體中的成員函式 )來說,function指向乙個函式的使用形式為:

若函式定義的形式為:type fun_name( type1 i, type2  j)

則使用function指向此函式:functiontf;

tf=fun_name;

呼叫函式:tf( 1, 2 );

function模板內"<>"所要使用的型別要和函式的一致:type表示所指函式的返回值型別,type1,type2是所指函式引數的型別。

void  print( int i, int j )

boost::functiontf;

tf =print;

tf(3, 4);

輸出3       4

要使用function指向乙個類的成員函式時,不管是在指向此成員函式還是呼叫此成員函式都要讓function物件知道其位址(宣告function物件時就宣告了位址部分)。呼叫成員函式時還只能呼叫某乙個物件的成員函式。

class myfun

};boost::functiontf;

tf =&myfun::print;

myfun f;

tf(&f::print,3, 4);

輸出3       4

function應用直接應用於類的成員函式時,宣告時要宣告對應成員函式類的指標物件,在呼叫時再將定義的類物件的位址傳入

對於普通函式,

bind

繫結函式全部引數或者全部引數預設用佔位符代替的情況都可以和

function

連用。不能在

bind

繫結函式時使用佔位符來預設部分引數,然後再和function連用,在

bind

內使用佔位符時,如果在

bind

繫結函式後面補齊引數則與

function

物件的型別不匹配,如果在使用

function

物件時補齊引數,則編譯器會報函式引數不一致的錯誤。

class myfun

};……...

boost::functiontf;

myfun f;

tf = boost::bind(&myfun::print, f, 3, 4);

tf(3, 4);

可編寫程式驗證二者聯用需要遵循的規則。就前面筆記。

continue break exit用法說明

1,continue用法 2,break用法 3,sys.exit用法 1,continue用法 跳出本次迴圈,繼續下次迴圈 for i in xrange 10 if i 8 continue print i 當程式執行到i 8的時候,發現i此時等於這個時候,在執行continue後,就返回到fo...

linux 和 , 和 說用法

分號用法 方式 command1 command2 用 號隔開每個命令,每個命令按照從左到右的順序,順序執行,彼此之間不關心是否失敗,所有命令都會執行。管道符用法 方式 command1 command2 linux所提供的管道符 將兩個命令隔開,管道符左邊命令的輸出就會作為管道符右邊命令的輸入。連...

go語言中fallthrough的用法說明

fallthrough go裡面switch預設相當於每個case最後帶有break,匹配成功後不會自動向下執行其他case,而是跳出整個switch,但是可以使用fallthrough強制執行後面的case switch 輸出結果 the integer was 5 the integer was...