function
概念
std::function 是 C++11 标准库在 <functional> 头文件中引入的一个通用、多态函数包装器。本质上它是一个类模板,能够包装、存储、复制和调用任何可调用对象,包括函数指针、仿函数、lambda 表达式以及 bind 表达式等。这些被存储的可调用对象被称为 function 的目标。如果 function 不含目标则为空,调用空的 function 会抛出异常。
由于函数指针、仿函数、lambda 表达式等类型各不相同,function 可以统一它们的类型进行包装,这在很多需要声明可调用对象类型的场景下非常方便。
用法
使用语法如下:
#include<functional>
std::function<返回类型 (参数类型 1, 参数类型 2,...)> 包装器名称;
下面是一个综合示例,展示了如何包装普通函数、Lambda 表达式和仿函数:
#include<iostream>
#include<functional>
using namespace std;
// 普通函数
int add(int a, int b) {
return a + b;
}
// Lambda 表达式
auto multiply = [](int a, int b) {
return a * b;
};
// 仿函数
struct Subtract {
int operator()(int a, int b) const {
return a - b;
}
};
int main() {
// 声明一个 function,它可以包装一个返回 int,接受两个 int 参数的可调用对象
function<int(, )> func;
func = add;
cout << << (, ) << endl;
func = multiply;
cout << << (, ) << endl;
Subtract sub;
func = sub;
cout << << (, ) << endl;
func = []( a, b) { a / b; };
cout << << (, ) << endl;
;
}


