std::bind args
时间: 2024-09-24 08:20:12 浏览: 41
C++11中lambda、std::function和std:bind详解
`std::bind` 是 C++11 引入的一个功能强大的工具,用于创建可调用的对象,这些对象代表原始函数的特定实例,允许你在不改变原函数签名的情况下绑定部分参数或整个函数。其基本语法如下:
1. **绑定普通函数**[^1]:
```cpp
#include <iostream>
#include <functional> // for std::bind
// 定义一个普通函数
double my_divide(double x, double y) {
return x / y;
}
int main() {
// 使用 std::placeholders 来定义占位符
using namespace std::placeholders;
// 绑定 my_divide 函数,第一个参数(x)固定为 2
auto fn_half = std::bind(my_divide, _1, 2);
// 调用结果相当于 my_divide(10, 2),输出 5
std::cout << fn_half(10) << '\n';
return 0;
}
```
在这个例子中,`std::bind` 把 `my_divide` 函数与 `2` 进行绑定,使得每次调用 `fn_half` 时,第一个参数总是 `2`。
2. **std::bind 返回类型**:
`std::bind` 的返回类型实际上是 `std::function` 或者一个兼容它的类型,它实现了 `Callable` 接口,即一个可以接受任意数量和类型的参数并返回值的函数对象。具体来说,它是一个未指定类型的函数对象 `T`,满足 `std::is_bind_expression::value == true` 和 `std::is_invocable<T>::value == true`。
总结来说,`std::bind` 可以让你动态地创建函数的副本,以便在不同的上下文中传递给其他函数或存储起来待后用。
阅读全文