std::bind和fuction的使用
时间: 2024-02-19 22:56:31 浏览: 22
std::bind和std::function是C++11中引入的函数相关的工具。
std::bind是一个函数模板,用于将函数或成员函数与其参数绑定,生成一个新的可调用对象。它可以用来延迟函数的调用或者改变函数的参数顺序。std::bind的基本语法如下:
```cpp
auto newFunc = std::bind(func, arg1, arg2, ...);
```
其中,func是要绑定的函数或成员函数,arg1、arg2等是要绑定的参数。newFunc是一个可调用对象,可以像普通函数一样进行调用。
std::function是一个通用的函数封装器,可以存储、复制和调用任意可调用对象(函数、函数指针、成员函数指针等)。它可以用来实现回调函数、事件处理等功能。std::function的基本语法如下:
```cpp
std::function<返回类型(参数类型)> func;
```
其中,返回类型和参数类型可以根据实际情况进行定义。func可以被赋值为任意可调用对象,并且可以像普通函数一样进行调用。
下面是一个示例代码,演示了std::bind和std::function的使用:
```cpp
#include <iostream>
#include <functional>
void func(int a, int b) {
std::cout << "a + b = " << a + b << std::endl;
}
class Foo {
public:
void memberFunc(int a, int b) {
std::cout << "a * b = " << a * b << std::endl;
}
};
int main() {
auto newFunc = std::bind(func, 10, std::placeholders::_1);
newFunc(20); // 输出:a + b = 30
Foo foo;
auto memberFunc = std::bind(&Foo::memberFunc, &foo, std::placeholders::_1, 5);
memberFunc(4); // 输出:a * b = 20
std::function<void(int, int)> callback = func;
callback(3, 4); // 输出:a + b = 7
return 0;
}
```