std::bind()函数如何使用
时间: 2023-07-23 08:34:49 浏览: 94
C++ 11 std::function和std::bind使用详解
std::bind() 函数是 C++11 中的一个函数模板,它可以用于创建一个函数对象,并且可以改变函数的参数数量或顺序。std::bind() 函数的简单示例如下:
```
#include <functional>
void foo(int x, int y) {
// do something
}
int main() {
auto f = std::bind(foo, 42, std::placeholders::_1);
f(5); // 调用 foo(42, 5)
return 0;
}
```
在这个示例中,我们使用 std::bind() 函数创建了一个函数对象 f,它将 foo 函数的第一个参数绑定为 42,第二个参数使用 std::placeholders::_1 占位符表示,它表示 f 被调用时的第一个参数。因此,当我们调用 f(5) 时,实际上是调用了 foo(42, 5)。
std::bind() 函数还可以改变参数的顺序,例如:
```
#include <functional>
#include <iostream>
void foo(int x, int y) {
std::cout << x << ", " << y << std::endl;
}
int main() {
auto f = std::bind(foo, std::placeholders::_2, std::placeholders::_1);
f(5, 42); // 调用 foo(42, 5)
return 0;
}
```
在这个示例中,我们使用 std::bind() 函数创建了一个函数对象 f,它将 foo 函数的参数顺序改变为 y, x。因此,当我们调用 f(5, 42) 时,实际上是调用了 foo(42, 5)。
除了 std::placeholders::_1、_2 等占位符外,std::bind() 还可以使用具体的值作为参数,例如:
```
#include <functional>
#include <iostream>
void foo(int x, int y) {
std::cout << x << ", " << y << std::endl;
}
int main() {
auto f = std::bind(foo, 42, 5);
f(); // 调用 foo(42, 5)
return 0;
}
```
在这个示例中,我们使用 std::bind() 函数创建了一个函数对象 f,它将 foo 函数的参数都绑定为具体的值。因此,当我们调用 f() 时,实际上是调用了 foo(42, 5)。
阅读全文