发展
boost::function<bool(void, int)> func
c++11 后:
std::function包含于头文件 #include<functional>中
什么是function<T>
function<T>是一个模板类,封装有函数指针类型,即T一定要是函数指针类型。
为什么引入function<T>
1. 把不同的函数类型统一成同一种类型,从而为模板函数提供统一接口。
2. 简化了函数指针的声明
可将各种可调用实体进行封装统一,包括:普通函数、lambda、表达式、函数指针、仿函数
function模板相对于一般模板的优点就是模板实例化次数更少,一般模板对上述每种类型都要实例化依次,function模板对类型相同的各种类型只实例化一次
//普通函数
int add(int a, int b){
return a+b;
}
//lambda表达式
auto mod=[](int a, int b){return a%b;};
//函数对象
struct divide{
int operator()(int m, int n){
return m/n;
}
};
function<int(int,int)> func1= add;
function<int(int,int)> func2= divide();
function<int(int,int)> func3= mod;
//被封装后普通函数、Lambda、函数对象对属于同一个类型,放到函数模板中后,只实例化一次
function的实现
function<T> 就是对函数、lambda函数指针的封装,T为函数指针类型。
定义多种类型转换构造函数,就可以把lambda函数指针、普通函数指针、函数对象等转换为function类型。