详解std::bind
时间: 2024-04-20 13:20:43 浏览: 118
std::bind是C++11标准库中的一个函数模板,用于创建一个可调用对象(函数对象或者函数指针)的绑定副本。它可以将函数的参数和调用方式进行灵活的绑定,从而实现参数的延迟绑定或者部分参数绑定。
std::bind的基本语法如下:
```cpp
std::bind(Function, args...);
```
其中,Function是需要绑定的函数或者函数指针,args是需要绑定的参数。
std::bind的返回值是一个可调用对象,可以直接调用或者保存起来后再调用。调用时,可以传入额外的参数,这些额外的参数会被添加到绑定的参数列表中。
下面是一些std::bind的使用示例:
1. 绑定全局函数:
```cpp
void foo(int a, int b) {
std::cout << a << " + " << b << " = " << a + b << std::endl;
}
auto func = std::bind(foo, 10, 20);
func(); // 输出:10 + 20 = 30
```
2. 绑定成员函数:
```cpp
class Bar {
public:
void bar(int a, int b) {
std::cout << a << " - " << b << " = " << a - b << std::endl;
}
};
Bar obj;
auto func = std::bind(&Bar::bar, &obj, 10, 5);
func(); // 输出:10 - 5 = 5
```
3. 延迟绑定参数:
```cpp
void printSum(int a, int b, int c) {
std::cout << a << " + " << b << " + " << c << " = " << a + b + c << std::endl;
}
auto func = std::bind(printSum, std::placeholders::_1, 2, std::placeholders::_2);
func(10, 20); // 输出:10 + 2 + 20 = 32
```
4. 绑定到函数对象:
```cpp
struct Add {
int operator()(int a, int b) {
return a + b;
}
};
Add add;
auto func = std::bind(add, std::placeholders::_1, 5);
int result = func(10); // result的值为15
```
阅读全文