std::bind 与std::function使用例程
时间: 2024-12-16 08:13:19 浏览: 6
C++ 11 std::function和std::bind使用详解
`std::bind` 和 `std::function` 都是 C++11 中用于处理函数对象的工具,它们的主要区别在于绑定和存储函数的方式。
**std::bind 示例**:
`std::bind` 函数允许你在运行时将特定的参数绑定到函数上,形成一个新的可调用对象。例如,假设我们有一个接受两个整数参数并返回它们乘积的函数 `double multiply(int a, int b)`,我们可以这样使用 `std::bind`:
```cpp
#include <functional>
int add(int a, int b) { return a + b; }
// 创建一个函数对象,绑定加法函数和参数 2、3
auto funcAddTwo = std::bind(add, 2, 3);
double result = funcAddTwo(); // 调用,结果为 5
```
在这里,`funcAddTwo` 实际上是一个函数引用,它的行为等同于 `add(2, 3)`。
**std::function 示例**:
`std::function` 则更通用,它可以存储任何类型的可调用对象(包括普通函数、lambda表达式、成员函数等)。例子如下:
```cpp
#include <functional>
// 声明一个接受两个整数的函数模板
template<typename T>
T multiply(T a, T b) {
return a * b;
}
// 使用std::function保存multiply函数
std::function<double(int, int)> mulFunc = std::bind(multiply, 2, 3);
double result2 = mulFunc(); // 结果同样为 6
```
这里,`mulFunc` 可以存储 `multiply` 的实例,并在需要的时候调用。
阅读全文