Lambda 表达式
时间:2021-11-15 14:13:51
手机看文章
扫描二维码
随时随地手机看文章
[导读]常见的语言中都提供Lambda语法糖,比如C#,Python,Golang等。本文将探讨下C11引入的Lambda语法糖。语法糖是一种让程序员使用更加便利的一种语法,并不会带来额外的功能,比如Lambda,没有这种语法糖,其可以用已有的语法等价的实现出相应的功能。有编程实践经验的...
常见的语言中都提供Lambda语法糖,比如C#, Python, Golang等。本文将探讨下C 11引入的Lambda语法糖。
有编程实践经验的同学一定能够快速的理解
语法糖
是一种让程序员使用更加便利的一种语法,并不会带来额外的功能,比如Lambda
,没有这种语法糖,其可以用已有的语法等价的实现出相应的功能。有编程实践经验的同学一定能够快速的理解
Lamdba
产生的意义,而缺乏编程经验的同学,跟着我一起来梳理下Lamdba
给我们带来了哪些便利性?函数指针和对象函数
因为笔者用Lambda
最多的场景是回调函数,先说说回调函数。在编程中回调函数
是一个常见的设计方式, 下图是一个常见的同步调用的回调函数:调用方
访问被调用方
的实现函数InvokeFunction
被调用方
访问调用方
的回调函数CallbackFunction
被调用方
使用调用方
指定的方法去实现内部的一个逻辑。常见的比如:被调用模块
使用调用模块
指定的方法完成其功能,比如常见的std::sort
- 比如SDK没有写DebugLog的功能,而是通过回调函数的方式,让调用方实现写DebugLog功能。
- 通知机制:在一些场景下,
被调用方
通过回调函数去通知调用模块
,去进行相应操作。 - …
回调函数
和函数对象
(仿函数
)。回调函数最常见的C和C 中都使用的函数指针
,我们以std::sort
为例。一个vector
容器中存储了若干的Student
信息,想要将这些学生信息根据年龄进行升序排序,于是可以调用std::sort
,并且使用自定义的函数StudentSortFunction
给sort
作为回调函数来完成排序。#include
#include
#include
struct Student
{
std::string m_strName;
unsigned int m_uAge;
};
void PrintStudentVector(const std::vector