一、function
1. 概念
上一篇文章我们学习了 lambda 表达式的用法。
std::function 是 C++11 标准库在 <functional> 头文件中引入的一个通用、多态的函数包装器。它的本质是一个类模板,可以包装、存储、复制和调用任何可调用对象(函数指针、仿函数、lambda 表达式、bind 表达式等),存储的可调用对象被称为 function 的目标。function 不含目标则为空,调用空 function 的目标会抛异常。
函数指针、仿函数、lambda 表达式等可调用对象的类型各不相同,function 可以统一类型,对他们进行包装,这样在很多地方就方便声明可调用对象的类型。
2. 用法
以上是 function 的原型,使用语法为:
#include <functional>
std::function<返回类型 (参数类型 1, 参数类型 2,...)> 包装器名称;
来看一段代码实例:
#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<(, )> func;
func = add;
cout << << (, ) << endl;
func = multiply;
cout << << (, ) << endl;
Subtract sub;
func = sub;
cout << << (, ) << endl;
func = []( a, b) {
a / b;
};
cout << << (, ) << std::endl;
;
}


