C/C++探秘(2)

目录

1. lambda 表达式 之匿名函数

2. std::function 模板类


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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值