Lambda 表達式
時間:2021-11-15 14:13:51
手機看文章
掃描二維碼
隨時隨地手機看文章
[導(dǎo)讀]常見的語言中都提供Lambda語法糖,比如C#,Python,Golang等。本文將探討下C11引入的Lambda語法糖。語法糖是一種讓程序員使用更加便利的一種語法,并不會帶來額外的功能,比如Lambda,沒有這種語法糖,其可以用已有的語法等價的實現(xiàn)出相應(yīng)的功能。有編程實踐經(jīng)驗的...
常見的語言中都提供Lambda語法糖,比如C#, Python, Golang等。本文將探討下C 11引入的Lambda語法糖。
有編程實踐經(jīng)驗的同學(xué)一定能夠快速的理解 上述是一個同步調(diào)用的回調(diào)方式,是實踐中,也有可能是一個異步的回調(diào)方式。一般回調(diào)的使用場景可以是
語法糖
是一種讓程序員使用更加便利的一種語法,并不會帶來額外的功能,比如Lambda
,沒有這種語法糖,其可以用已有的語法等價的實現(xiàn)出相應(yīng)的功能。有編程實踐經(jīng)驗的同學(xué)一定能夠快速的理解
Lamdba
產(chǎn)生的意義,而缺乏編程經(jīng)驗的同學(xué),跟著我一起來梳理下Lamdba
給我們帶來了哪些便利性?函數(shù)指針和對象函數(shù)
因為筆者用Lambda
最多的場景是回調(diào)函數(shù),先說說回調(diào)函數(shù)。在編程中回調(diào)函數(shù)
是一個常見的設(shè)計方式, 下圖是一個常見的同步調(diào)用的回調(diào)函數(shù):調(diào)用方
訪問被調(diào)用方
的實現(xiàn)函數(shù)InvokeFunction
被調(diào)用方
訪問調(diào)用方
的回調(diào)函數(shù)CallbackFunction
被調(diào)用方
使用調(diào)用方
指定的方法去實現(xiàn)內(nèi)部的一個邏輯。常見的比如:被調(diào)用模塊
使用調(diào)用模塊
指定的方法完成其功能,比如常見的std::sort
- 比如SDK沒有寫DebugLog的功能,而是通過回調(diào)函數(shù)的方式,讓調(diào)用方實現(xiàn)寫DebugLog功能。
- 通知機制:在一些場景下,
被調(diào)用方
通過回調(diào)函數(shù)去通知調(diào)用模塊
,去進行相應(yīng)操作。 - …
回調(diào)函數(shù)
和函數(shù)對象
(仿函數(shù)
)。回調(diào)函數(shù)最常見的C和C 中都使用的函數(shù)指針
,我們以std::sort
為例。一個vector
容器中存儲了若干的Student
信息,想要將這些學(xué)生信息根據(jù)年齡進行升序排序,于是可以調(diào)用std::sort
,并且使用自定義的函數(shù)StudentSortFunction
給sort
作為回調(diào)函數(shù)來完成排序。#include?
#include?
#include?
struct?Student
{?
??std::string??m_strName;??
??unsigned?int?m_uAge;
};
void?PrintStudentVector(const?std::vector