zoukankan      html  css  js  c++  java
  • 参数绑定

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

  • 相关阅读:
    Vue学习笔记-基本语法
    Vue学习笔记-使用ElementUI
    Vue学习笔记-目录结构
    Arcgis api for javascript学习笔记(3.2版本)
    _countof
    自启动在UAC开启状态下解决方案
    windows常见启动项启动顺序
    ssh登录的一个小问题
    centos5.5 环境变量设置
    avalon2 第一个demo
  • 原文地址:https://www.cnblogs.com/FlyerBird/p/11761019.html
Copyright © 2011-2022 走看看