什么是bind函数,为什么要使用bind函数

这是接着上一篇关于lambda表达式写的。如果要理解bind函数最好和lambda表达式一起理解,因为他们要解决相同的问题。也就是要解决回调函数的参数适配问题。所以如果不太了解回调函数和lambda表达式的话请戳这里这里。理解了回调函数和lambda表达式之后,理解bind函数就很容易了。bind函数的功能就是把多余的参数用实参代替,返回一个参数数目更少的新函数,以便新的函数能够作为回调函数被另一个函数调用。bind的用法如下:

auto  newCallable = bind(callable, arg_list);

其中callable就是原函数,arg_list就是callable的参数列表,不同参数之间用逗号隔开。arg_list允许包含占位符:_1, _2, _3等。占位符所处位置的参数就是新函数的参数。_1表示其所处位置的参数是新函数的第一个参数,_2表示第二个参数。例如

bool compare(int i, double j);
auto newFunc =bind(compare, 4, _1);
这里新的函数就是只有一个double型的参数,返回值为bool型。

bind函数还有一个功能就是重排参数,例如

auto newFunc=bind(compare, _2, _1);
这样就相当于重新定义了一个函数,它的函数体和compare一模一样,但是参数列表颠倒了一下,double j在前,int i在后。所以在调用的时候就要先传入double型再传入int型参数。否则出错。


水平有限,如有不妥,敬请拍砖。


参考文献

C++ primer

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值