日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

传递function_boost库function与bind

發(fā)布時間:2024/10/8 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 传递function_boost库function与bind 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

boost庫function與bind


一、function 頭文件:boost/function.hpp function更合適的說法我覺得是一種回調(diào)函數(shù)的表現(xiàn)方式。

boost::function是一個函數(shù)對象的“容器”,概念上像是C/C++中函數(shù)指針類型的泛化,是一種“智能函數(shù)指針”。它以對象的形式封裝了原始的函數(shù)指針或函數(shù)對象,能夠容納任意符合函數(shù)簽名的可調(diào)用對象。在聲明 functions 時,聲明中最重要的部分是函數(shù)的簽名。這部分即是告訴 function 它將保存的函數(shù)或函數(shù)對象的簽名和返回類型。

boost::function能夠代替函數(shù)指針,并且能能接受函數(shù)或函數(shù)對象,增加了程序的靈活性。但是boost::function相比函數(shù)指針來說體積稍大一點(diǎn),速度上稍慢一點(diǎn)。


函數(shù)原型:boost::function f;

看一個簡單的例子:

#include <iostream> #include <boost/function.hpp> #include <boost/bind.hpp>typedef boost::function<int(int,char)>Func;int test(int num,char ch) {std::cout<<num<<" "<<ch<<std::endl; }int main() {Func f;f = &test;f(1,'a');return 0; }//回調(diào)函數(shù)

結(jié)果是:

localhost@localhost:/mnt/hgfs/share/boost$ ./function 1 a

二、bind 頭文件:boost/bind.hpp

bind的基本形式如下:

template<class R,class F> bind(F f); template<class R,class F,class A1> bind(F f,A1 a1); namespace { boost::arg<1> _1; boost::arg<2> _2; boost::arg<3> _3; ….. //其他6個占位符 };

bind接收的第一個參數(shù)必須是一個可調(diào)用的對象f,包括函數(shù)、函數(shù)指針、函數(shù)對象、和成員函數(shù)指針,之后bind最多接受9個參數(shù),參數(shù)數(shù)量必須與f的參數(shù)數(shù)量相等,這些參數(shù)被傳遞給f作為入?yún)ⅰ?綁定完成后,bind會返回一個函數(shù)對象,它內(nèi)部保存了f的拷貝,具有operator(),返回值類型被自動推導(dǎo)為f的返回類型。在發(fā)生調(diào)用時這個函數(shù)對象將把之前存儲的參數(shù)轉(zhuǎn)發(fā)給f完成調(diào)用。例如,有一個函數(shù)func,它的形式是:

1 func(a1,a2);

那么,他將等價于一個具有無參operator()的bind函數(shù)對象調(diào)用:

1 bind(func,a1,a2)();

這是bind最簡單的形式,bind表達(dá)式存儲了func和a1、a2的拷貝,產(chǎn)生了一個臨時函數(shù)對象。因為func接收兩個參數(shù),而a1和a2的拷貝傳遞給func完成真正的函數(shù)調(diào)用。

bind的真正威力在于它的占位符,它們分別定義為_1,_2,_3,一直到 _9,位于一個匿名的名字空間。占位符可以取代bind參數(shù)的位置,在發(fā)生調(diào)用時才接受真正的參數(shù)。占位符的名字表示它在調(diào)用式中的順序,而在綁定的表達(dá)式中沒有沒有順序的要求,_1不一定必須第一個出現(xiàn),也不一定只出現(xiàn)一次,例如:

1 bind(func,_2,_1)(a1,a2);

返回一個具有兩個參數(shù)的函數(shù)對象,第一個參數(shù)將放在func的第二個位置,而第二個參數(shù)則放在第一個位置,調(diào)用時等價于:

1 func(a2,a1);

看一下例子:

#include <functional> #include <iostream> #include <string> #include "boost/bind.hpp"void print_string(const std::string s) { std::cout << s << 'n'; } void print_functionname() {std::cout << "Print_functionname" <<std::endl; }int main() {boost::bind(print_functionname)();return 0; }

結(jié)果:

localhost@localhost:/mnt/hgfs/share/boost$ ./bind Print_functionname

包含類的例子:

#include <functional> #include <iostream> #include <string> #include "boost/bind.hpp" class Test { public: void print_string(const std::string& s) const{ std::cout << s << 'n'; }void print(){std::cout << "Test" << std::endl;} };int main() {Test ts;boost::bind(&Test::print,_1)(ts);boost::bind(&Test::print_string,_1,_2)(ts,"hello Test");return 0; }

結(jié)果:

localhost@localhost:/mnt/hgfs/share/boost$ ./bind Test hello Test

三、function與bind聯(lián)合使用 一般bind和function會在一起使用,這里只寫一個簡單的例子

#include <iostream> #include <boost/bind.hpp> #include <boost/function.hpp>typedef boost::function<void(void)>Func;void print_string(const std::string s) {std::cout<<"s:"<<s<<std::endl; }int main() {Func f(boost::bind(print_string,"hello bind"));f();return 0; }

結(jié)果:

localhost@localhost:/mnt/hgfs/share/boost$ ./bind1 s:hello bind

參考文章:https://www.cnblogs.com/blueoverflow/p/4740093.html


想了解學(xué)習(xí)更多C++后臺服務(wù)器方面的知識,請關(guān)注: 微信公眾號:====C++后臺服務(wù)器開發(fā)====


總結(jié)

以上是生活随笔為你收集整理的传递function_boost库function与bind的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 麻豆传媒在线播放 | 四虎成人免费视频 | 五月天黄色小说 | 欧美成人一二三区 | 日韩免费视频一区二区视频在线观看 | 亚洲男人的天堂网 | 日一区二区三区 | 欧美在线一二 | 亚洲日本在线观看 | 国产成人在线播放视频 | 在线播放ww | 性欧美在线 | a级片网址 | 人体一级片 | 97小视频 | a人片 | 免费中文字幕 | 精品777| av动漫网站 | 自拍视频一区二区 | 亚洲剧情在线 | 国产精品欧美激情在线 | 黄色在线免费观看网站 | 欧美丰满少妇 | 日本888xxxx| 亚洲国产精品欧美久久 | 久久99热这里只有精品 | 中文字字幕一区二区三区四区五区 | 国产草草 | 在线草| 免费看女生裸体视频 | 婷婷俺来也 | 国产精品一线天粉嫩av | 国产性生活毛片 | 欧美欧美欧美欧美 | 在线免费国产视频 | 翔田千里一区二区 | 丝袜诱惑一区 | 一本不卡 | 人人看超碰 | а√中文在线资源库 | 国产区精品在线观看 | 欧美无玛| 日本三级理论片 | 奇米影视欧美 | 91香蕉视频黄色 | 婷婷色婷婷开心五月四房播播 | 国产又粗又猛又爽又黄 | 国产91高清 | 一本一道久久a久久综合蜜桃 | 中文字幕欧美人妻精品一区蜜臀 | xxxwww18| 亚洲一级电影 | 成人性生交大片免费看vrv66 | 伊人久久精品一区二区三区 | 免费日本黄色片 | 秋霞亚洲| 69久久 | 国精产品乱码一区一区三区四区 | 欧美激情网站 | 深夜免费福利 | 亚洲精品乱码久久久久久久久久久久 | 久久精品一区二区免费播放 | 日本韩国欧美中文字幕 | 可以免费看av的网站 | 欧美专区日韩专区 | 成人av动漫在线观看 | 亚洲综合色小说 | 国产成人精品av久久 | 青青草视频观看 | 亚洲在线网站 | 黄色小视频在线观看 | 内射一区二区 | 99国产精品99 | 伊人三区 | 国产精品乱码久久久久久久久 | 国产一区二区精品在线观看 | 一区二区免费在线观看视频 | 一区二区三区人妻 | av图片在线观看 | 一本大道伊人av久久综合 | 午夜视频在线观看一区 | 久视频在线观看 | 欧美激情精品久久久久久变态 | 亚洲最大网 | 国产尤物在线视频 | av午夜在线观看 | 亚州av免费| 国产吃瓜黑料一区二区 | 午夜精品成人毛片非洲 | 久久精品视频在线免费观看 | 福利国产视频 | 善良的老师伦理bd中字 | 日本一区二区三区视频在线 | 精品久久久久久久久久久久 | 午夜精品久久久久久毛片 | 国产精品久线在线观看 | 99自拍视频在线观看 | 日韩天天操|