std::function 是 C++ 标准库(C++11 引入)中的一个通用 函数包装器,它可以存储、复制和调用各种 可调用对象(如普通函数、Lambda 表达式、函数对象、成员函数等)。它是 `` 头文件的一部分,常用于实现 回调机制、事件处理、策略模式 等场景。
#### 1.基本语法
```
#include <functional>
std::function<返回值类型(参数类型1, 参数类型2, ...)> 变量名;
//示例:
std::function<int(int, int)> func; // 声明一个接收两个int参数、返回int的可调用对象包装器
```
#### 2.能存储哪些对象?
- 1.存储普通函数
```
#include <functional>
#include <iostream>
int add(int a, int b) {
return a + b;
}
int main() {
std::function<int(int, int)> func = add;
std::cout << func(2, 3); // 输出: 5
return 0;
}
```
- 2.存储Lambda表达式
```
int main() {
std::function<int(int, int)> func = [](int a, int b) {
return a * b;
};
std::cout << func(3, 4); // 输出: 12
return 0;
}
```
- 3.存储函数对象(仿函数)
```
struct Multiply {
int operator()(int a, int b) {
return a * b;
}
};
int main() {
std::function<int(int, int)> func = Multiply();
std::cout << func(3, 5); // 输出: 15
return 0;
}
```
- 4.存储成员函数(需绑定对象)
```
class Math {
public:
int subtract(int a, int b) {
return a - b;
}
};
int main() {
Math math;
// 使用 std::bind 绑定对象和成员函数
std::function<int(int, int)> func = std::bind(&Math::subtract, &math, std::placeholders::_1, std::placeholders::_2);
std::cout << func(10, 4); // 输出: 6
return 0;
}
```
- 5.静态成员函数
```
#include <functional>
#include <iostream>
class Math {
public:
static int divide(int a, int b){return a-b;}
};
int main() {
std::function<int(int, int)> func = Math::divide;
std::cout << func(3, 3); // 输出: 5
return 0;
}
```