溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么使用C++ bind函數(shù)

發(fā)布時(shí)間:2021-10-26 10:15:12 來源:億速云 閱讀:158 作者:iii 欄目:編程語言

本篇內(nèi)容主要講解“怎么使用C++ bind函數(shù)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“怎么使用C++ bind函數(shù)”吧!

1.使用由來

我們看到我使用的代碼是boost :: bind,而大家在網(wǎng)上看到的大部分介紹是標(biāo)準(zhǔn)函數(shù)std :: bind,其實(shí)boost ::  bind是標(biāo)準(zhǔn)函數(shù)std :: bind1st和std ::  bind2nd的泛化。它支持任意函數(shù)對象,函數(shù),函數(shù)指針和成員函數(shù)指針,并且能夠?qū)⑷魏螀?shù)綁定到特定值或?qū)⑤斎雲(yún)?shù)路由到任意位置。bind對函數(shù)對象沒有任何要求;  特別地,它不需要result_type,first_argument_type和second_argument_type標(biāo)準(zhǔn)typedef。

2.使用介紹

通常我們可以將bind函數(shù)看作一個(gè)通用的函數(shù)適配器,它接受一個(gè)可調(diào)用對象,生成一個(gè)新的可調(diào)用對象來“適應(yīng)”原對象的參數(shù)列表。bind可以根據(jù)當(dāng)前已有的可調(diào)用對象,構(gòu)造出一個(gè)新的可調(diào)用對象,有了bind,我們可以實(shí)現(xiàn)“動(dòng)態(tài)生成新的函數(shù)”的功能。簡而言之,就是可以通過bind函數(shù)修改原函數(shù)并生成一個(gè)可以被調(diào)用的對象,類似于函數(shù)的重載,但是我們又不需要去重新寫一個(gè)函數(shù),用bind函數(shù)就可以實(shí)現(xiàn)。

接下來我們看看bind函數(shù)是如何使用的呢?

綁定一個(gè)普通函數(shù)和函數(shù)指針:

int fun(int a, int b,int c,int d,int e) {     return a + b - c + d - e; }  int main() {   int x=1,y=2,z=3;   auto g =bind(fun,x,y,_2,z,_1); }

這樣的g 是一個(gè)有兩個(gè)參數(shù)的可調(diào)用對象,它的兩個(gè)參數(shù)分別用占位符_2  和_1表示。這個(gè)新的可調(diào)用對象將它自己的參數(shù)作為第三個(gè)和第五個(gè)傳遞給fun,fun函數(shù)的第一個(gè)、第二個(gè)第四個(gè)參數(shù)分別被綁定到給定的值x、y、z上。

綁定一個(gè)成員函數(shù):

bind最常用的功能之一,是由類成員函數(shù)構(gòu)造bind對象;想想看,如何由類成員函數(shù)(非static成員函數(shù))構(gòu)造回調(diào)函數(shù)?答案是很難,而通過bind,卻可以很容易做到。

class Speaker { public     Speaker();     ~Speaker()     {         speaker_play_routine_->join();     }     void playRoutine()     {     } private     boost::thread* speaker_play_routine_{nullptr}; }; int main() {    speaker_play_routine_ = new boost::thread(boost::bind(&Speaker::playRoutine, this));  }

這里類的成員函數(shù)必須通過類的對象或者指針調(diào)用,因此在綁定時(shí),bind要拿出第一個(gè)參數(shù)的位置來指定一個(gè)類的實(shí)例、指針或者引用。

注意:必須在成員函數(shù)前面加上取地址的操作符&。

到此,相信大家對“怎么使用C++ bind函數(shù)”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI