通过使用std::function,可以将不同类型的可调用对象封装成统一的格式,从而使用相同的接口进行调用;在设计回掉函数、事件处理 、函数对象等场景中十分有用。
① 封装函数指针
② 封装lambda
③ 封装成员函数等
1. 包含头文件
#include<functional>
2. 声明一个对象,返回类型(参数类型)
std::function<int(int)> myfunc;
3. 封装不同内容
3.1 封装函数指针
int func1(int x) return x * 2;
std::function<int(int)> myfunc = func1; 封装函数指针
int result = myfunc(2) 调用封装的函数指针
3.2 封装lambda表达式
std::function myfunc = [ ](int x ) {return x * 2};
int result = myfunc(5);
3.3 封装成员函数
class A
{
public:
int a_func(int x) {return x * 2}
};
A a;
std::function<int(A*, int)> myfunc = &A::a_func;
int result = myfunc(5);
4. 作为函数参数
void do_something(std::function<int(int)> myfunc) {
int result = myfunc(5);
}
int func1(int x) {return x * 2};
do_something(func1)