类模板 std::function 是一种通用的多态函数包装器。
std::function 可以存储、复制和调用任何 Callable 目标的实例、函数、lambda 表达式,绑定表达式或其他函数对象,以及指向成员函数和指向数据成员的指针。
所存储的可调用对象被称为目标的 std::function,不包含目标的 std::function 将其称为空,调用目标为空的 std::function,结果为 std :: bad_function_call 抛出异常。
一个例子说明 std::function 的使用:
#include <iostream>
#include <functional>
auto g_lambda = [](int a, int b) -> int { return a + b; };
int add(int a, int b) {
return a + b;
}
class Add {
public:
int operator () (int a, int b) {
return a + b;
}
};
int main()
{
std::function<int(int, int)> func1 = add;
int result1 = func1(1, 2);
std::cout << "result1: " << result1 << std::endl;
std::function<int(int, int)> func2 = g_lambda;
int result2 = func2(1, 3);
std::cout << "result2: " << result2 << std::endl;
std::function<int(int, int)> func3 = Add();
int result3 = func3(1, 4);
std::cout << "result2: " << result3 << std::endl;
return 0;
}
// 输出结果为:
// result1: 3
// result2: 4
// result2: 5