std::bind 用法
时间: 2023-07-08 10:41:35 浏览: 52
`std::bind` 是 C++11 标准库中的一个函数,它可以用来创建一个函数对象(即可调用对象),并且可以延迟绑定函数的参数。
`std::bind` 的基本语法如下:
```c++
template <class F, class... Args>
std::function<F(Args...)> std::bind(F&& f, Args&&... args);
```
其中,`F` 表示函数类型,`Args` 表示函数参数类型,`f` 表示要绑定的函数,`args` 表示要绑定的参数。
例如,我们可以使用 `std::bind` 来创建一个只有一个参数的函数对象:
```c++
#include <iostream>
#include <functional>
void print(int n) {
std::cout << n << std::endl;
}
int main() {
auto f = std::bind(print, 42);
f(); // 输出 42
return 0;
}
```
在上面的例子中,我们使用 `std::bind` 绑定了一个只有一个参数的函数 `print`,并且将参数设置为 42。然后,我们创建了一个函数对象 `f`,并且调用它,输出了 42。
除了绑定参数之外,`std::bind` 还可以用来调整函数参数的顺序,例如:
```c++
#include <iostream>
#include <functional>
void print(int a, int b) {
std::cout << a << ", " << b << std::endl;
}
int main() {
auto f1 = std::bind(print, 1, 2);
f1(); // 输出 1, 2
auto f2 = std::bind(print, std::placeholders::_2, std::placeholders::_1);
f2(2, 1); // 输出 1, 2
return 0;
}
```
在上面的例子中,我们使用 `std::placeholders::_1` 和 `std::placeholders::_2` 来指定函数参数的位置,然后使用 `std::bind` 绑定了一个函数 `print`,并且调整了参数的顺序,最后创建了一个函数对象 `f2`,并且调用它,输出了 1, 2。
这只是 `std::bind` 的基本用法,它还可以用于更复杂的情况,例如绑定成员函数、绑定多个参数等等。