Lambda 表達(dá)式
時(shí)間:2021-11-15 14:13:51
手機(jī)看文章
掃描二維碼
隨時(shí)隨地手機(jī)看文章
[導(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ǔ)法糖。
有編程實(shí)踐經(jīng)驗(yàn)的同學(xué)一定能夠快速的理解
語(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ù):調(diào)用方
訪(fǎng)問(wèn)被調(diào)用方
的實(shí)現(xiàn)函數(shù)InvokeFunction
被調(diào)用方
訪(fǎng)問(wèn)調(diào)用方
的回調(diào)函數(shù)CallbackFunction
被調(diào)用方
使用調(diào)用方
指定的方法去實(shí)現(xiàn)內(nèi)部的一個(gè)邏輯。常見(jiàn)的比如:被調(diào)用模塊
使用調(diào)用模塊
指定的方法完成其功能,比如常見(jiàn)的std::sort
- 比如SDK沒(méi)有寫(xiě)DebugLog的功能,而是通過(guò)回調(diào)函數(shù)的方式,讓調(diào)用方實(shí)現(xiàn)寫(xiě)DebugLog功能。
- 通知機(jī)制:在一些場(chǎng)景下,
被調(diào)用方
通過(guò)回調(diào)函數(shù)去通知調(diào)用模塊
,去進(jìn)行相應(yīng)操作。 - …
回調(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ù)StudentSortFunction
給sort
作為回調(diào)函數(shù)來(lái)完成排序。#include?
#include?
#include?
struct?Student
{?
??std::string??m_strName;??
??unsigned?int?m_uAge;
};
void?PrintStudentVector(const?std::vector