日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 芯聞號(hào) > 充電吧
[導(dǎo)讀]Lambda表達(dá)式:代替std::bind的絕佳方法lambda表達(dá)式使得函數(shù)指針有了更靈活的使用方法,但是有些時(shí)候,對(duì)于大型的函數(shù),還是不建議用lambda表達(dá)式,誰也不想在函數(shù)里又看到一段長長的函

Lambda表達(dá)式:代替std::bind的絕佳方法

lambda表達(dá)式使得函數(shù)指針有了更靈活的使用方法,但是有些時(shí)候,對(duì)于大型的函數(shù),還是不建議用lambda表達(dá)式,誰也不想在函數(shù)里又看到一段長長的函數(shù)。

Lambda表達(dá)式的用法在:C++11 lambda表達(dá)式在for_each和transform算法下的使用已經(jīng)進(jìn)行了介紹。另外我在另一篇文章利用C++11的function和bind功能,實(shí)現(xiàn)QStandardItemModel的通用遍歷函數(shù)里使用了std::bind功能,這個(gè)函數(shù)是為了把一個(gè)多變量的函數(shù)指針轉(zhuǎn)變?yōu)橐粋€(gè)指定變量的函數(shù)指針
例如有個(gè)函數(shù)如:

void?fun1(int?a)

但實(shí)際上你可能想要傳入的函數(shù)是這樣寫的:

void?funMy(int?a,double*?b,float?other)

這時(shí),可以通過std::bind來實(shí)現(xiàn)函數(shù)的綁定。std::placeholders::_1這種占位符就是用在變量綁定的,但是橫看豎看都覺得別扭
上面的例子得這樣寫

double??b?=?1.0;
float?other?=?2.0;
std::bind(funMy,std::placeholders::_1,&b,other));

當(dāng)然,如果你不知道還有·std::bind·這樣的函數(shù),你可能會(huì)這樣寫:

void?funMy_2(int?a)
{
????double??b?=?1.0;
????float?other?=?2.0;
????funMy(a,&b,other?);
}

這樣就把那個(gè)三參數(shù)的funMy(int a,double* b,float other)轉(zhuǎn)換為單參數(shù)的fun1(int a),使得函數(shù)指針的參數(shù)一致,但是得再寫一個(gè)函數(shù)好麻煩的……
但是有了Lambda表達(dá)式后,第二種之前比較不好的方式反而變得更好
因?yàn)閒unMy_2可以這樣代替:

double??b?=?1.0;
float?other?=?2.0;
[&](int?a){funMy(a,&b,other?);}

直接就產(chǎn)生一個(gè)匿名的void(*(int))函數(shù)指針!


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉