目录
1. lambda 表达式 之匿名函数
有些程序员认为,让函数定义直接处于 调用函数的地方会十分有用。即,lambda表达式的定义和使用是在同一个地方进行的。这对于一些内容比较简单的函数确实比较友好。
核心思想:把函数的声明、定义、使用放在一句话解决。如果这是一次性的函数,连名字都不用给,直接匿名。
匿名函数的大致结构:
其中,可变规则 和 返回类型 不是必选。返回类型可以根据 decltyp 从返回值推断得到。
所以简化的结构:
[ ]( ){ }; // 匿名函数声明
[ ]( ){ } ( 实参表 ); // 匿名函数的调用
[捕获列表] 确定匿名函数调用时使用哪些外部变量(跟输入参数无关)
(参数列表) 同 函数的参数列表
{函数体} 同 函数的函数体
最简单的例子:
如果说for_each() 的第三个参数是一个彻底的一次性函数,其他地方不会复用。那么我们就可以在这里使用匿名函数。
进一步的例子:
单独使用匿名函数,可以直接把实参放在定义的屁股后面。
研究一些捕获列表的例子:
捕获列表主要有以下几种形式:
lambda 还有很多有趣的复杂的用法,后续还会再补充。
参考:
C++ | 匿名函数(lambda表达式)_我叫RT的博客-优快云博客_c++匿名函数
C++匿名函数_晚睡的人没对象的博客-优快云博客_c++ 匿名函数
2. std::function 模板类
std::function是C++11中新引入的模板类,是一种通用的多态函数包装器。
std::function可以存储,复制和调用任何Callable 目标的实例,例如函数,lambda表达式,绑定表达式或其他函数对象,以及指向成员函数和指向数据成员的指针。
原型:
std::function < 返回类型 ( 输入参数列表 ) > // 声明一个 函数原型
先看一个最简单的例子:
复杂一点的例子,把function模板变成函数的参数:
更加复杂的例子,把function模板实例化为一个匿名函数,作为函数的输入参数:
std::function 还有很多有趣的复杂的用法,后续还会再补充。
参考:
C++ std::function介绍和使用_jinzhu1911的博客-优快云博客_c++ std::function
std::function详解_在座的各位都是高手的博客-优快云博客_std:function