C++基础知识7:functionnal库的bind函数
本文目的
简单的介绍一下bind函数是做什么的,会在哪些常见使用,这里讲的是functional库的bind函数而不是其他的
前置与关联知识点
bind函数简介
参考《Primer C++》10.3.4参数绑定p354
可以将bind函数看作一个通用的函数配接器,接受一个可调用对象,生成一个新的可调用对象。
bind函数的使用
1. bind函数的一般形式
auto newCallable = bind(callable, arg_list);
//callable是可调用对象(函数体,仿函数等)
//arg_list是一个逗号分隔的参数列表,依次代表需要填入callable的参数
//arg_list可以是占位符_1,_2,...,_n,或者实际参数。
//占位符表示新生成的可调用对象newCallable的形参。
假如有如下函数
void func1(int a, int b, char c){int d = a + b + c};//原来的函数
auto func2 = bind(callable, _2, _1, '6');//使用的bind函数进行新的函数生成
//调用func2(x,y);
func2(2,3);//等价于调用了func1(y,x,'6');
//等价于func2的函数是
//void func2(int b, int a){int d = a + b +'6'};
可以看出来其实占位符是为了表征新的可调用对象的哪个参数对应原来可调用对象的哪个参数,这样可以在不需要重新编写的情况下获得新的可调用对象,提高复用性。
2. 在哪些场景使用
函数指针是可以作为形参的,但是函数指针的指针类型必须对的上,bind函数可以很好的把原有的可调用对象,修改成适合的函数指针类型(仅仅是形参,返回值好像无法修改)。
3. 例子
直接看《Primer C++》10.3.4参数绑定p354这里就不写了。
参考文献
《Primer C++》10.3.4参数绑定p354