std::function怎么使用
时间: 2023-07-23 07:44:27 浏览: 45
`std::function` 是 C++11 标准库中的一个模板类,用于封装各种可调用对象,包括普通函数、函数指针、成员函数指针、函数对象以及 lambda 表达式等。
使用 `std::function` 首先需要包含头文件 `<functional>`。
下面是一个使用示例:
```c++
#include <iostream>
#include <functional>
void func(int x, int y) {
std::cout << x + y << std::endl;
}
class Foo {
public:
void operator()(int x, int y) const {
std::cout << x * y << std::endl;
}
};
int main() {
std::function<void(int, int)> f1 = func; // 普通函数
std::function<void(int, int)> f2 = &func; // 函数指针
std::function<void(int, int)> f3 = Foo(); // 函数对象
std::function<void(int, int)> f4 = [](int x, int y) { std::cout << x - y << std::endl; }; // lambda 表达式
f1(1, 2); // 输出 3
f2(3, 4); // 输出 7
f3(5, 6); // 输出 30
f4(7, 8); // 输出 -1
return 0;
}
```
上述代码中,`std::function<void(int, int)>` 表示一个接受两个 int 类型参数、返回值为 void 的可调用对象。`f1`、`f2`、`f3`、`f4` 分别创建了四个 `std::function` 类型的对象,分别对应普通函数、函数指针、函数对象以及 lambda 表达式。可以像普通函数一样调用 `f1`、`f2`、`f3`、`f4` 对象,并传入相应的参数进行调用。
需要注意的是,使用 `std::function` 封装函数指针时,需要使用取地址运算符 `&`。此外,如果封装的是成员函数指针,则需要传入一个对象指针或引用作为第一个参数。