C++11 bind函数
bind函数的用途
bind函数是一个函数适配器,接受一个callable object,生成一个新的callable object。
可以把原可调用对象(callable object)的参数预先绑定到给定的变量中(参数绑定),以生成新的可调用对象。
bind函数的使用
#include <iostream>
#include<functional> //提供bind函数
//测试用函数
int minus(int a, int b)
{
return a - b;
}
//测试用类
class A
{
public:
void show(int a,int b)
{
std::cout << "Class A:" <<a<<" "<<b<< std::endl;
}
};
int main()
{
using namespace std::placeholders; // _1 _2
//(1)绑定普通函数,其中 _1表示新函数的func1的第一个参数,_2表示新函数的第二个参数
auto func1 = std::bind(minus, _1, _2);
std::cout << func1(1, 2) << std::endl;//等价于调用minus(1,2),输出:-1
//(2)交换参数位置
auto func2 = std::bind(minus, _2, _1);
std::cout << func2(1, 2) << std::endl;//等价于调用minus(2,1),输出:1
//(3)直接给参数赋值
auto func3 = std::bind(minus, 10, _1);
std::cout << func3(5) << std::endl; //func3参数变为一个,输出:5
auto func4 = std::bind(minus, 10, 3);
std::cout << func4() << std::endl; //func4参数变为无参,输出:7
//(4)绑定成员函数
A a;
auto func5 = std::bind(&A::show, &a, 3, 9);
func5();//输出:Class A: 3 9
system("pause");
}
总结
bind函数的用途就是实现可调用类型的转换,起到一个可调用类型适配器的作用。