bind()是一个函数适配器,返回一个可调用对象,他可以将一个函数的参数列表做魔改。

设置默认参数

using namespace std::placeholders;
void f(int a, int b)
{
cout << a << ' ' << b;
} int main()
{
int a = 0;
auto new_f = bind(f, _1, 3);
new_f(1);//结果输出1 3
return 0;
}

其中的_1是一个参数占位符,_n就代表占住函数new_f()的第n个参数。_n定义在std::placeholders命名空间内,通过using声明来使用。

调整参数顺序

using namespace std::placeholders;
void ff(int a, int b)
{
cout << a << ' ' << b;
} int main()
{
int a = 0;
auto f = bind(ff, _2, _1);
f(1, 3);//结果输出3 1
return 0;
}

绑定引用参数

默认情况,bind那些不是占位符的参数被拷贝到bind返回的可调用对象中。如果希望传递引用,可用ref()函数传递。

using namespace std::placeholders;
void f(int& a)
{
++a;
} int main()
{
int a = 0;
auto new_f = bind(f, ref(a));
new_f();
cout << a; //结果为1
return 0;
}

C++ bind函数的更多相关文章

  1. (十一)socket、connect、bind函数详解

    一.socket函数 1.头文件: #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> 2.函数原型: ...

  2. Javascript中call、apply、bind函数

    javascript在函数创建的时候除了自己定义的参数外还会自动新增this和arguments两个参数 javascript中函数也是对象,call.apply.bind函数就是函数中的三个函数,这 ...

  3. angular.bind() 函数

    angular.bind bind 函数有三个参数, 参一:是一个对象 参二:是一个 function 参三:是用来给参二传参数的,可写可不写,看你心情 参数也可以在调用函数的时候传,也可以当做第三个 ...

  4. jQuery.bind() 函数详解

    bind()函数用于为每个匹配元素的一个或多个事件绑定事件处理函数. 此外,你还可以额外传递给事件处理函数一些所需的数据. 执行bind()时,事件处理函数会绑定到每个匹配元素上.因此你使用bind( ...

  5. call,apply,bind函数

    一.call函数 a.call(b); 简单的理解:把a对象的方法应用到b对象上(a里如果有this,会指向b) call()的用法:用在函数上面 var Dog=function(){ this.n ...

  6. C++ Primer : 第十章 : 泛型算法 之 lambda表达式和bind函数

    一.lambda表达式 lambda表达式原型: [capture list] (parameter list) -> retrue type { function body } 一个lambd ...

  7. 模拟实现兼容低版本IE浏览器的原生bind()函数功能

    模拟实现兼容低版本IE浏览器的原生bind()函数功能: 代码如下: if(!Function.prototype.bind){   Function.prototype.bind=function( ...

  8. bind函数

    bind函数把一个本地协议地址赋予一个套接字 对于网际协议,协议地址是32位的IPv4地址或128位的IPv6与16位的TCP或UDP端口号的组合 int bind ( int sockfd, con ...

  9. js 中的bind函数

    bind是Function.prototype中内置函数 作用是指定函数作用域 代码参考 http://blog.csdn.net/load_life/article/details/7200381 ...

  10. 《Javascript高级程序设计》读书笔记之bind函数详解

    为什么需要bind var name = "The Window"; var object = { name: "My Object", getNameFunc ...

随机推荐

  1. 【排序】什么都能排的C语言qsort排序详解【超详细的宝藏级别教程】深度理解qsort排序

    [排序]什么都能排的C语言qsort排序详解[超详细的宝藏级别教程]深度理解qsort排序 作者: @小小Programmer 这是我的主页:@小小Programmer 在食用这篇博客之前,博主在这里 ...

  2. CF1000F One Occurrence题解

    题目链接:CF 或者 洛谷 感觉很经典的题,而且给的 \(5e5\),虽然莫队之类的很好想,但完全没必要去考虑这类算法,这种数据范围常数又大又开盲盒.很显然的具有单 \(log\) 的算法. 回忆下经 ...

  3. 【题解】P5461 赦免战俘

    一.题目 现有 \(2^n\times2^n\ (n≤10)\) 名作弊者站成一个正方形方阵等候 kkksc03 的发落.kkksc03 决定赦免一些作弊者.他将正方形矩阵均分为 4 个更小的正方形矩 ...

  4. 高精度模板 大数加大数,可变数组vector实现

    vector<int> Add(vector<int>& A, vector<int>& B)//采用引用传入vector,避免将其全部复制传值,使 ...

  5. java中“0x”表示的含义

    public static void main(String[] args) { int a = 0xff;//16进制默认是int int b = 0x000000ff; System.out.pr ...

  6. Moon.Orm版本维护及下载

    MoonOrm最新版及代码生成器 (2020-8-29)

  7. 易语言连接Mysql

    最近在写游戏的辅助工具研究了下易语言,下面就说下如何连接Mysql. .版本 2 .支持库 mysql .支持库 spec Mysql句柄 = 连接MySql ("127.0.0.1&quo ...

  8. 小程序中用css修改svg的颜色

    记一下(#^.^#) <div class="svg"> <img src="./firefox-logo.svg" class=" ...

  9. ChainMap合并字典

    在python中,我们有两个字典需要合并的时候,可以使用字典的update方法 a = {'a': 1, 'b': 2} b = {'x': 3, 'y': 4} a.update(b) print( ...

  10. 【Azure Developer】使用Azure Key Vault 的Key签名后,离线验证的一些参考资料

    问题描述 使用 key Vault 的sign接口,Request Body中的 Value 是要传什么呢? 签名后的内容如何在本地离线验证呢? Azure Key Vault Sign 接口:htt ...