std::function类似于一个函数对象或函数指针,通过模板的方式定义,相比c中的函数指针和c++中的函数对象,更加的直观、简洁。
#include <functional> //引入此头文件
#include <iostream>
using namespace std;
//c函数
int c_function(int a, int b)
{
return a + b;
}
//C++函数对象
class FunctionObject
{
public:
int operator()(int a, int b)
{
return a + b;
}
};
void use_function()
{
//传统用法
int(*f)(int, int); //声明函数类型
f = c_function;
cout << f(3, 4) << endl; //7
FunctionObject funcobj; //声明函数对象
cout << funcobj(3, 4) << endl; //7
//c++11函数对象
std::function<int(int, int)> func; //重点
//赋值:传统c函数指针
func = c_function;
cout << func(3, 4) << endl; //7
//赋值:函数对象
func = funcobj;
cout << func(3, 4) << endl; //7
//赋值:lambda表达式
func = [](int a, int b) ->int { return a + b; };
cout << func(3, 4) << endl; //7
}