std::bind 和 std::function
时间: 2023-07-22 22:02:11 浏览: 66
std::function 是 C++11 标准库中的一个模板类,它可以存储任意可调用对象(函数、函数指针、函数对象、lambda 表达式)。std::function 可以做为一个通用的回调函数使用,以实现函数重载、类型转换、参数绑定等功能。
std::bind 是 C++11 标准库中的一个函数,可以创建一个可调用对象,以实现参数绑定。std::bind 可以绑定函数、函数指针、成员函数指针等可调用对象的一些参数,并返回一个可调用的对象。这个对象可以作为 std::function 存储,以实现一些常用的参数绑定需求。
相关问题
C++ std::bind 和 std::function
可以回答这个问题。C++11 引入了 std::bind 和 std::function,它们都是函数对象的封装。std::bind 可以将一个函数和一些参数绑定在一起,形成一个新的可调用对象;std::function 可以存储任何可调用对象,包括函数指针、函数对象、成员函数指针等。它们都可以用于实现回调函数、事件处理等功能。
std::function 和 std::bind
std::function和std::bind是C++中的函数对象和函数绑定的工具。下面是一个例子来介绍它们的用法:
```cpp
#include <iostream>
#include <functional>
void showAll(int a, double b, const std::string& c) {
std::cout << a << "; " << b << "; " << c << std::endl;
}
int main(int argc, char** argv) {
using namespace std::placeholders;
// 使用std::bind将showAll函数绑定成为另一个函数对象
std::function<void(int, double)> output = std::bind(&showAll, _1, _2, "Kobe");
// 调用绑定后的函数对象
output(1, 2);
return 0;
}
```
输出结果为:1; 2; Kobe
在这个例子中,我们定义了一个名为showAll的函数,它接受一个整数、一个双精度浮点数和一个字符串作为参数,并将它们打印出来。然后,我们使用std::bind将showAll函数绑定成为另一个函数对象output。在绑定过程中,我们使用std::placeholders来占位符表示绑定的参数位置。最后,我们调用output函数对象,并传入实际的参数值1和2,输出结果为1; 2; Kobe。