function和lamda以及bind
5 分钟阅读
•
438 字
+
789 词
std::function 类模板
是什么?
抽象
- 把任意函数包装成一个对象,该对象可以保存,传送和复制。
- 动态绑定,只要修改对象(赋值不同的function对象),实现类似多态的效果
用途
- 保存普通函数,类的静态成员函数
- 保存仿函数
- 保存类成员函数
- 保存lambda表达式
- 保存bind返回的函数对象
仿函数(函数对象)
是什么?
特征
- 可以有状态,通过成员变量进行存储状态
- 有状态的函数对象称之为闭包
lambda表达式
是什么?
构成
- 值捕获 : 默认只读,不能修改 。 添加mutable之后可读可写,但是并不会修改外部变量的值
- 引用捕获 : 可读可写,会修改外部变量的值
指定返回值
原理
- 编译的时候, 将lambda表达式转变为一个函数对象
- 根据lambda参数列表 重载operator()操作符 。
bind函数适配器
是什么?
- 用来通过 绑定函数以及函数参数 的方式生成函数对象的模板函数
- 提供占位符,实现灵活参数绑定
特征
- 绑定函数以及函数参数
- 允许修改参数顺序
总结
- function用来描述 函数对象 的 类型 ;
- lambda表达式用来 生成函数对象 (可以访问外部变量的匿名函数)
- bind也是用来 生成函数对象 (函数和参数进行绑定生成函数对象)