std::function和std::bind
时间: 2023-04-24 16:04:53 浏览: 165
std::function 是 C++11 标准库中的一个模板类,它可以存储任意可调用对象(函数、函数指针、函数对象、lambda 表达式)。std::function 可以做为一个通用的回调函数使用,以实现函数重载、类型转换、参数绑定等功能。
std::bind 是 C++11 标准库中的一个函数,可以创建一个可调用对象,以实现参数绑定。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。
std::function和std::bind详解
std::function和std::bind是C++11中引入的两个重要的函数对象库。std::function是一个通用的函数封装器,可以用来存储、复制、调用任何可调用对象(函数、函数指针、成员函数指针、lambda表达式等)。std::bind是一个函数适配器,用于将可调用对象和其参数进行绑定,生成一个新的可调用对象。
下面是std::function和std::bind的详细介绍和示例:
1. std::function的使用:
```cpp
#include <iostream>
#include <functional>
bool compare(int x, int y) {
return x < y;
}
int main() {
std::function<bool(int, int)> fun;
fun = compare;
bool result = fun(3, 5);
std::cout << "std::function测试, result is " << result << std::endl;
return 0;
}
```
2. std::bind的使用:
```cpp
#include <iostream>
#include <functional>
bool compare(int x, int y) {
return x < y;
}
int main() {
std::function<bool(int)> fun;
fun = std::bind(compare, 3, std::placeholders::_1);
bool result = fun(5);
std::cout << "std::bind测试, result is " << result << std::endl;
return 0;
}
```
阅读全文