前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >参数绑定

参数绑定

作者头像
Enterprise_
发布2019-11-03 12:22:25
1.7K0
发布2019-11-03 12:22:25
举报
文章被收录于专栏:小L的魔法馆小L的魔法馆

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。undefined本文链接:https://blog.csdn.net/Enterprise_/article/details/102806998

bind作用和形式

bind用于将一个可调用对象绑定到新的可调用对象上,新对象的参数就是被绑定对象参数列表中的占位符所占据的位置的参数

其调用形式如下:

代码语言:javascript
复制
auto newCallable=bind(callable,arg_list);

bind的第一个参数为一个可调用对象,可调用对象是指可以对其使用调用运算符()的对象。

可调用对象常用的有函数、函数指针、重载了函数调用运算符的类和lambda表达式

arg_list是调用对象的参数列表,可以包含 _ 1, _ 2等这样的占位符,用于占据调用对象的参数位置,数字代表着是第几个参数,占位符被定义在,命名空间placeholders中。也可以包含被绑定对象的参数。arg_list应该和被绑定对象的参数一样多。

example

代码语言:javascript
复制
int sum(int a, int b, int c) {
	if (a > b)return a + c;
	return b + c;
}
auto add = bind(sum, _1, _2, 10);

这样就将sum绑定由bind新生成的一个调用sum的对象上;

_ 1表示新对象中的第一个参数,是一个占位符。

也就是说,实际上,这个bind会add( _ 1, _ 2)会被映射成为sum( _ 1, _ 2, 10),此时add的参数就会代替原来的占位符成为调用sum的参数,当然前提是两者的类型要匹配。

比如:add(20,10)实际调用为sum(20,10,10),结果为30;

参数顺序可换

代码语言:javascript
复制
#include<bits/stdc++.h>
using namespace std;
using namespace placeholders;
int sum(int a, int b, int c) {
	if (a > b)return a + c;
	return b + c;
}
int main(void) {
	auto add  = bind(sum, _1, _2, 10);
	auto add2 = bind(sum, _2, _1, 10);
	int t = add(20, 10), t1 = add2(10,20);
	cout << t << " " << t1 << endl;
	return 0;
}

bind也可以换原来参数的顺序,因为实际在调用新对象时,我们传递给新对象的参数实际就是那些占位符占据的位置的参数,所以上面调用情况如下:

add(20,10) 时,参数20对应占位符1,参数10对应占位符2,故实际调用为sum(20,10,10);

add2(10,20)时,参数10对应占位符1,参数20对应占位符2,故实际调用为sum(20,10,10);

从而重排了参数顺序。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-10-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • bind作用和形式
  • example
  • 参数顺序可换
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档