function是一个模板类,其作用是将一个可执行的元素,比如函数,函数对象等包裹在一个函数对象内,改函数对象可以拷贝和转移:
#include <iostream>
#include <functional>
using namespace std;
void func1(int d)
{
cout<<__func__<<" "<<d<<endl;
}
template<class T>
void func2(T t)
{
cout<<__func__<<" "<<t<<endl;
}
class Func{
public:
void operator()(int d)
{
cout<<__func__<<" "<<d<<endl;
}
static void s_func(int d)
{
cout<<__func__<<" "<<d<<endl;
}
};
int main()
{
function<void(int)> f1 = func1; //包裹普通函数
f1(1); //输出:func1 1
function<void(int)> f2 = func2<int>; //包裹模板函数实例
f2(2); //输出:func2 2
function<void(int)> f3 = Func(); //包裹函数对象
f3(3); //输出:operator() 3
function<void(int)> f4 = Func::s_func; //包裹类静态函数
f4(4); //输出:s_func 4
return 0;
}