std::function和std::bind详细使用 方法和代码例子
时间: 2023-09-23 20:12:05 浏览: 95
关于Function中的bind()示例详解
std::function 和 std::bind 都是 C++11 中引入的函数对象封装工具,可以用来对函数或者函数对象进行封装和绑定参数,以便在需要时进行调用。
std::function 的使用方法:
std::function 可以用来封装任意可调用对象,包括函数指针、函数对象、成员函数指针等等。
使用 std::function 首先需要定义函数对象的类型,然后再将可调用对象赋值给该类型的实例即可。
下面是一个简单的例子,定义了一个函数 add,然后用 std::function 将其封装起来:
```c++
#include <iostream>
#include <functional>
int add(int x, int y)
{
return x + y;
}
int main()
{
std::function<int(int, int)> func = add; // 将 add 函数封装为 std::function 类型的对象
std::cout << func(1, 2) << std::endl; // 调用封装后的函数
return 0;
}
```
输出结果为:
```
3
```
std::bind 的使用方法:
std::bind 可以用来绑定函数的参数,生成一个新的函数对象。
使用 std::bind 需要先指定要绑定的函数对象,然后按照参数顺序将需要绑定的参数传入 std::bind 函数中即可。
下面是一个简单的例子,定义了一个函数 add,然后用 std::bind 将其绑定为一个只有一个参数的函数对象:
```c++
#include <iostream>
#include <functional>
int add(int x, int y)
{
return x + y;
}
int main()
{
auto newFunc = std::bind(add, 1, std::placeholders::_1); // 将 add 函数绑定为只有一个参数的函数对象
std::cout << newFunc(2) << std::endl; // 调用绑定后的函数
return 0;
}
```
输出结果为:
```
3
```
在这个例子中,`std::placeholders::_1` 表示占位符,表示绑定的参数位置,这里绑定的是第二个参数。当调用 `newFunc(2)` 时,2 会成为绑定参数的第一个参数,而绑定参数的第二个参数则固定为 1,所以最终调用的是 `add(1, 2)`,结果为 3。
阅读全文