[c++11]std::function/bind
function(可调用对象的包装器)
std::function是一个通用的函数封装类,它可以用来存储、复制和调用任何可调用对象(函数指针、函数对象、lambda表达式等)。
通过std::function,可以将不同类型的可调用对象封装为统一的类型,从而实现更灵活的函数传递和使用。
基本用法
//必须要包含一个叫做functional的头文件
#include <functional>//std::function<返回值类型(参数类型列表)> diy_name = 可调用对象;// 定义一个std::function对象,该对象可以接受两个整数参数并返回一个整数
std::function<int(int, int)> func;
存储可调用对象
// 存储函数指针
int add(int a, int b) {return a + b;
}
std::function<int(int, int)> func = add;// 存储lambda表达式
std::function<int(int, int)> func = [](int a, int b) { return a + b; };// 存储函数对象
struct Multiply {int operator()(int a, int b) {return a * b;}
};
Multiply multiply;
std::function<int(int, int)> func = multiply;
调用可调用对象
int result = func(3, 4); // 调用存储在func中的可调用对象
检查是否为空
if (func) {// func中存储了可调用对象
} else {// func为空
}
重置为nullptr
func = nullptr; // 清空func中的可调用对象
bind(绑定器)
std::bind用来将可调用对象与其参数一起进行绑定。绑定后的结果可以使用std::function进行保存,并延迟调用到任何我们需要的时候。
通俗来讲,它主要有两大作用:
- 将可调用对象与其参数一起绑定成一个仿函数。
- 将多元(参数个数为n,n>1)可调用对象转换为一元或者(n-1)元可调用对象,即只绑定部分参数。
绑定器函数使用语法格式如下:
// 绑定非类成员函数/变量
auto f = std::bind(可调用对象地址, 绑定的参数/占位符);
// 绑定类成员函/变量
auto f = std::bind(类函数/成员地址, 类实例对象地址, 绑定的参数/占位符);