當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > CPP開(kāi)發(fā)者
[導(dǎo)讀]常見(jiàn)的語(yǔ)言中都提供Lambda語(yǔ)法糖,比如C#,Python,Golang等。本文將探討下C11引入的Lambda語(yǔ)法糖。語(yǔ)法糖是一種讓程序員使用更加便利的一種語(yǔ)法,并不會(huì)帶來(lái)額外的功能,比如Lambda,沒(méi)有這種語(yǔ)法糖,其可以用已有的語(yǔ)法等價(jià)的實(shí)現(xiàn)出相應(yīng)的功能。有編程實(shí)踐經(jīng)驗(yàn)的...

常見(jiàn)的語(yǔ)言中都提供Lambda語(yǔ)法糖,比如C#, Python, Golang等。本文將探討下C 11引入的Lambda語(yǔ)法糖。語(yǔ)法糖是一種讓程序員使用更加便利的一種語(yǔ)法,并不會(huì)帶來(lái)額外的功能,比如Lambda,沒(méi)有這種語(yǔ)法糖,其可以用已有的語(yǔ)法等價(jià)的實(shí)現(xiàn)出相應(yīng)的功能。
有編程實(shí)踐經(jīng)驗(yàn)的同學(xué)一定能夠快速的理解Lamdba產(chǎn)生的意義,而缺乏編程經(jīng)驗(yàn)的同學(xué),跟著我一起來(lái)梳理下Lamdba給我們帶來(lái)了哪些便利性?

函數(shù)指針和對(duì)象函數(shù)

因?yàn)楣P者用Lambda最多的場(chǎng)景是回調(diào)函數(shù),先說(shuō)說(shuō)回調(diào)函數(shù)。在編程中回調(diào)函數(shù)是一個(gè)常見(jiàn)的設(shè)計(jì)方式, 下圖是一個(gè)常見(jiàn)的同步調(diào)用的回調(diào)函數(shù):

  1. 調(diào)用方訪(fǎng)問(wèn)被調(diào)用方的實(shí)現(xiàn)函數(shù)InvokeFunction
  2. 被調(diào)用方訪(fǎng)問(wèn)調(diào)用方的回調(diào)函數(shù)CallbackFunction
上述是一個(gè)同步調(diào)用的回調(diào)方式,是實(shí)踐中,也有可能是一個(gè)異步的回調(diào)方式。一般回調(diào)的使用場(chǎng)景可以是被調(diào)用方使用調(diào)用方指定的方法去實(shí)現(xiàn)內(nèi)部的一個(gè)邏輯。常見(jiàn)的比如:

  1. 被調(diào)用模塊使用調(diào)用模塊指定的方法完成其功能,比如常見(jiàn)的std::sort
  2. 比如SDK沒(méi)有寫(xiě)DebugLog的功能,而是通過(guò)回調(diào)函數(shù)的方式,讓調(diào)用方實(shí)現(xiàn)寫(xiě)DebugLog功能。
  3. 通知機(jī)制:在一些場(chǎng)景下,被調(diào)用方通過(guò)回調(diào)函數(shù)去通知調(diào)用模塊,去進(jìn)行相應(yīng)操作。
回調(diào)的場(chǎng)景應(yīng)該不止上述描述的這些,這一章節(jié)的重點(diǎn)讓我們回歸到回調(diào)函數(shù)函數(shù)對(duì)象仿函數(shù))。

回調(diào)函數(shù)最常見(jiàn)的C和C 中都使用的函數(shù)指針,我們以std::sort為例。一個(gè)vector容器中存儲(chǔ)了若干的Student信息,想要將這些學(xué)生信息根據(jù)年齡進(jìn)行升序排序,于是可以調(diào)用std::sort,并且使用自定義的函數(shù)StudentSortFunctionsort作為回調(diào)函數(shù)來(lái)完成排序。

#include?
#include?
#include?

struct?Student
{?
??std::string??m_strName;??
??unsigned?int?m_uAge;
};

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