• 参数绑定


    bind作用和形式

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

    auto newCallable=bind(callable,arg_list);
    

    bind的第一个参数为一个可调用对象,可调用对象是指可以对其使用调用运算符()的对象。
    可调用对象常用的有函数、函数指针、重载了函数调用运算符的类和lambda表达式
    arg_list是调用对象的参数列表,可以包含 _ 1, _ 2等这样的占位符,用于占据调用对象的参数位置,数字代表着是第几个参数,占位符被定义在,命名空间placeholders中。也可以包含被绑定对象的参数。arg_list应该和被绑定对象的参数一样多。

    example

    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;

    参数顺序可换

    #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);
    从而重排了参数顺序。

  • 相关阅读:
    java如何遍历Enumeration
    attachEvent与addEventlistener兼容性
    jquery如何把一个html元素替换成另外一个html元素?
    Struts2使用struts标签判断变量是否为空的写法
    ORACLE WITH AS 用法,创建临时表
    Hibernate传递list参数的例子
    java利用反射机制获取list中的某个字段并以list形式返回
    深入Golang之sync.Pool详解
    深入Golang调度器之GMP模型
    软技能,程序员编程之外的升值之道!【转】
  • 原文地址:https://www.cnblogs.com/FlyerBird/p/11761019.html
Copyright © 2020-2023  润新知