当前位置:首页 > 公众号精选 > CPP开发者
[导读]常见的语言中都提供Lambda语法糖,比如C#,Python,Golang等。本文将探讨下C11引入的Lambda语法糖。语法糖是一种让程序员使用更加便利的一种语法,并不会带来额外的功能,比如Lambda,没有这种语法糖,其可以用已有的语法等价的实现出相应的功能。有编程实践经验的...

常见的语言中都提供Lambda语法糖,比如C#, Python, Golang等。本文将探讨下C 11引入的Lambda语法糖。语法糖是一种让程序员使用更加便利的一种语法,并不会带来额外的功能,比如Lambda,没有这种语法糖,其可以用已有的语法等价的实现出相应的功能。
有编程实践经验的同学一定能够快速的理解Lamdba产生的意义,而缺乏编程经验的同学,跟着我一起来梳理下Lamdba给我们带来了哪些便利性?

函数指针和对象函数

因为笔者用Lambda最多的场景是回调函数,先说说回调函数。在编程中回调函数是一个常见的设计方式, 下图是一个常见的同步调用的回调函数:

  1. 调用方访问被调用方的实现函数InvokeFunction
  2. 被调用方访问调用方的回调函数CallbackFunction
上述是一个同步调用的回调方式,是实践中,也有可能是一个异步的回调方式。一般回调的使用场景可以是被调用方使用调用方指定的方法去实现内部的一个逻辑。常见的比如:

  1. 被调用模块使用调用模块指定的方法完成其功能,比如常见的std::sort
  2. 比如SDK没有写DebugLog的功能,而是通过回调函数的方式,让调用方实现写DebugLog功能。
  3. 通知机制:在一些场景下,被调用方通过回调函数去通知调用模块,去进行相应操作。
回调的场景应该不止上述描述的这些,这一章节的重点让我们回归到回调函数函数对象仿函数)。

回调函数最常见的C和C 中都使用的函数指针,我们以std::sort为例。一个vector容器中存储了若干的Student信息,想要将这些学生信息根据年龄进行升序排序,于是可以调用std::sort,并且使用自定义的函数StudentSortFunctionsort作为回调函数来完成排序。

#include 
#include 
#include 

struct Student

  std::string  m_strName;  
  unsigned int m_uAge;
};

void PrintStudentVector(const std::vector
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
关闭
关闭