成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

聊一聊C++bind函數(shù)使用

開發(fā) 后端
短短的一行代碼,實(shí)際上考驗(yàn)了一個(gè)人對(duì)C++的掌握深度,好了話不多說,進(jìn)入今天的介紹,c++ bind綁定函數(shù)。

 總述

最近寫代碼的時(shí)候看到代碼使用了bind,一個(gè)參數(shù)綁定的標(biāo)準(zhǔn)庫函數(shù)。程序是這么寫的, speaker_play_routine_ = new boost::thread

(boost::bind(&Speaker::playRoutine, this)); 這是我們一個(gè)語音播放的一行代碼。

其中 boost::thread是新建一個(gè)線程,線程執(zhí)行函數(shù)是Speaker::playRoutine,執(zhí)行函數(shù)被bind綁定函數(shù)可以修改普通函數(shù)來構(gòu)造bind對(duì)象,bind函數(shù)的第二個(gè)參數(shù)是this(this 是 C++ 中的一個(gè)關(guān)鍵字,也是一個(gè) const 指針,它指向當(dāng)前對(duì)象,通過它可以訪問當(dāng)前對(duì)象的所有成員)是Speaker::playRoutine類函數(shù)的參數(shù)。

短短的一行代碼,實(shí)際上考驗(yàn)了一個(gè)人對(duì)C++的掌握深度,好了話不多說,進(jìn)入今天的介紹,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ù)對(duì)象,函數(shù),函數(shù)指針和成員函數(shù)指針,并且能夠?qū)⑷魏螀?shù)綁定到特定值或?qū)⑤斎雲(yún)?shù)路由到任意位置。bind對(duì)函數(shù)對(duì)象沒有任何要求; 特別地,它不需要result_type,first_argument_type和second_argument_type標(biāo)準(zhǔn)typedef。

2.使用介紹

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

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

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

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

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

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

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

  1. class Speaker { 
  2. public 
  3.     Speaker(); 
  4.     ~Speaker() 
  5.     { 
  6.         speaker_play_routine_->join(); 
  7.     } 
  8.     void playRoutine() 
  9.     { 
  10.     } 
  11. private 
  12.     boost::thread* speaker_play_routine_{nullptr}; 
  13. }; 
  14. int main() 
  15.    speaker_play_routine_ = new boost::thread(boost::bind(&Speaker::playRoutine, this)); 
  16.  } 

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

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

參考文章:https://www.boost.org/doc/libs/1_65_1/libs/bind/doc/html/bind.html#bind.purpose.using_bind_with_functions_and_fu

本文轉(zhuǎn)載自微信公眾號(hào)「羽林君」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系羽林君公眾號(hào)。

 

責(zé)任編輯:武曉燕 來源: 羽林君
相關(guān)推薦

2021-02-06 08:34:49

函數(shù)memoize文檔

2020-11-10 07:46:58

函數(shù)printf 數(shù)據(jù)

2024-04-29 14:58:48

Python內(nèi)置函數(shù)

2020-10-30 07:11:31

C 語言編程

2022-08-30 07:39:57

C++namespace隔離

2022-05-18 16:35:43

Redis內(nèi)存運(yùn)維

2023-09-22 17:36:37

2021-01-28 22:31:33

分組密碼算法

2020-05-22 08:16:07

PONGPONXG-PON

2018-06-07 13:17:12

契約測試單元測試API測試

2021-08-29 18:34:44

編譯V8C++

2021-03-29 00:02:10

C#Attribute元素

2019-02-13 14:15:59

Linux版本Fedora

2021-08-04 09:32:05

Typescript 技巧Partial

2021-01-29 08:32:21

數(shù)據(jù)結(jié)構(gòu)數(shù)組

2022-08-08 08:25:21

Javajar 文件

2018-11-29 09:13:47

CPU中斷控制器

2022-11-01 08:46:20

責(zé)任鏈模式對(duì)象

2023-07-06 13:56:14

微軟Skype

2023-05-15 08:38:58

模板方法模式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品久久久久无码av | 日韩欧美福利视频 | 日日干夜夜干 | 成av人电影在线 | 丁香五月网久久综合 | 欧美精品一区二区三区在线 | 国产欧美日韩一区二区三区在线 | 国产精品成人品 | 日韩中文字幕在线视频观看 | 一级黄色片免费在线观看 | 日韩av大片免费看 | 国产在线一区二区三区 | 精品国产乱码久久久久久老虎 | 亚洲国产91| 日本淫视频 | www亚洲免费国内精品 | 久久国产成人精品国产成人亚洲 | 日韩成人在线电影 | 91麻豆精品国产91久久久久久久久 | 狠狠狠干 | 日韩精品一| 亚洲国产91| 亚洲国产偷 | 国产在线精品一区二区 | 久在草| 久久97精品 | 黄视频免费观看 | 国产精品成人一区二区三区 | 热久久999 | 免费在线成人 | 国产精品美女久久久久aⅴ国产馆 | 欧美成人激情 | 免费在线播放黄色 | 成人精品国产 | 日韩手机在线看片 | 久久精品亚洲国产 | 日韩资源| 国产在线精品一区二区 | 999国产视频 | 欧美八区 | 婷婷综合 |