1 简介
std::function是一个函数包装器,包含在头文件#include 中。该函数包装器模板能包装任何类型的可调用实体,如普通函数、函数对象、lambda表达式。
2 举例
2.1 包装非成员函数、函数指针
#include <functional>
int foo(int i)
{
return i * i;
}
int (*foo_ptr)(int) = foo;
int main(int, char **)
{
std::cout << "========boot=======" << endl;
function<int(int)> func1 = foo;//包装普通函数
function<int(int)> func2 = foo_ptr;//包装函数指针
function<int(int)> func3 = [](int i)
{ return i * i; };//包装lambda表达式
std::cout << func1(10) << endl;
std::cout << func2(10) << endl;
std::cout << func3(10) << endl;
std::cout << "========over=======" << endl;
}
2.2 包装成员函数
#include <functional>
class bar
{
public:
int foo(int i)
{
return i * i;
}
};
int main(int, char **)
{
std::cout << "========boot=======" << endl;
bar b;
//包装成员函数
function<int(int)> func1 = std::bind(bar::foo, &b, std::placeholders::_1);
std::cout << func1(10) << endl;
std::cout << "========over=======" << endl;
}
3 注意
需要注意的地方是,上述方法绑定的时候默认使用的是值传递,即使函数原型中参数类型为引用传递。这个时候需要用到std::ref等来进行显示引用传递,详见stdref和stdcref_目标:MVP-CSDN博客