@time    2019-07-07
@author  Ruo_Xiao

std::bind 则是用来绑定函数调用的参数的, 它解决的需求是我们有时候可能并不一定能够一次性获得调用某个函数的全部参数,通过这个函数, 我们可以将部分调用参数提前绑定到函数身上成为一个新的对象,然后在参数齐全后,完成调用。

std::placeholder,当分批付给函数参数的过程中,如果还没有赋值的参数,使用 std::placeholder 进行占位,意思时该位置的参数现在还不清楚,后期再赋值。

#include <functional>
#include <iostream>void foo(int a, int b, int c)
{std::cout << "a = " << a << " b = " << b << " c = " << c << std::endl;
}
int main()
{// 将参数 2,3 绑定到函数 foo 参数 b 和 c 上,但是使用 std::placeholders::_1 来对第一个参数进行占位。auto bindFoo = std::bind(foo, std::placeholders::_1, 2, 3);// 这时调用 bindFoo 时,只需要提供第一个参数即可bindFoo(1);return 0;
}

下面是图解 bind 函数部分。

1、bind 可以用来将用户提供的需要一个参数的函数转换成不需要参数的函数对象。绑定的值(在这个例子中是 123)存储在函数对象内并且会被自动传递给用户指定的函数。

2、参数绑定也可以用于将类成员函数转换成零参数的函数对象。猿类们都知道,非静态成员函数需要一个隐式的 this 参数。这意味着需要绑定一个合适的类实例指针到这个函数对象。

3、相应地,隐式的 this 指针也可以显式地传递给需要一个参数的函数对象。

4、函数对象经常同时使用提前绑定的参数和调用时才提供的参数。这个可以用成员函数来实现。

5、当然也可以使用非成员函数。

6、有些时候函数对象被调用时会提供多余的参数,而这些参数是目标函数不需要的。bind 会自动忽略这些多余的参数。

7、这些多余的参数不需要一定在函数对象签名的最后。

8、最后, bind 还允许重新组织函数对象的参数顺序。

图解部分转载于:https://www.cnblogs.com/xusd-null/p/3698969.html

(SAW:Game Over!)

C++11 std::bind 和 std::placeholder相关推荐

  1. c++11 std::bind与std::function

     function模板类和bind模板函数,使用它们可以实现类似函数指针的功能,但却比函数指针更加灵活,特别是函数指向类的非静态成员函数时. std::function可以绑定到全局函数/类静态成 ...

  2. C++11 std::function, std::bind, std::ref, std::cref

    C++11 std::function, std::bind, std::ref, std::cref 转自:http://www.jellythink.com/ std::function 看看这段 ...

  3. C++11新特性之std::bind()

    文章转载自:http://www.jellythink.com/archives/773 Cocos2d-x中有如下代码: // new callbacks based on C++11#define ...

  4. C++11 std::bind std::function 高级用法

    C++11 std::bind std::function 高级用法 (c++11的新特性) 原文:https://blog.csdn.net/yangjie6898862/article/detai ...

  5. 【C++】C++11的std::function和std::bind用法详解

    在设计回调函数的时候,无可避免地会接触到可回调对象.在C++11中,提供了std::function和std::bind两个方法来对可回调对象进行统一和封装. 可调用对象 C++中有如下几种可调用对象 ...

  6. C++11 - std::bind简要介绍以及可绑定函数的几种形式总结

    文章目录 1 std::bind 1.1 函数模板说明 1.2 函数模板参数说明 1.3 函数模板返回值说明 2 std::bind可绑定的几种函数形式总结 2.1 绑定普通函数或者静态函数 2.1. ...

  7. C++ 11 笔记 (四) : std::bind

    std::bind 接受一个可调用的对象,一般就是函数呗.. 还是先上代码: 1 void func(int x, int y, int z) 2 { 3 std::cout << &qu ...

  8. 可调用对象、std::function、std::bind

    可调用对象.std::function.std::bind 仿函数functors function adapter bind(C++11) 函数适配器:bind2nd 仿函数适配器(mem_fun/ ...

  9. std::bind介绍

    bind是这样一种机制,它可以预先把指定可调用实体的某些参数绑定到已有的变量,产生一个新的可调用实体,这种机制在回调函数的使用过程中也颇为有用.C++98中,有两个函数bind1st和bind2nd, ...

最新文章

  1. 隐藏画质代码_「图」画质修改工具ReShade放出4.5.0更新:改进对Vulkan等较新API的支持...
  2. 如何在64位的windows平台上安装需要c编译的python扩展库
  3. java 左移 返回值_java左移右移运算符详解
  4. 传统负载均衡助力AIOps优化智能运维
  5. 干货 | 手把手带你搞硬件设计!
  6. 淘宝/天猫直通车基本概念
  7. 如何阅读一本书-读书笔记
  8. 我的团长我的团第三集
  9. 3-Coloring(奇偶涂色)
  10. 使用OneDNS完美实现Chorme自动同步书签和插件
  11. Profile多环境支持
  12. 状态方程simulink仿真_控制系统设计与仿真作业与复习资料
  13. Android中Fragment的分屏显示处理横竖屏显示
  14. 【Android】Activity详解
  15. 7-90 社交集群 (30分)--详解
  16. Git安装、配置和使用
  17. day001:数据结构和算法-时间频度和时间复杂度
  18. 憨牛女装旗舰店开业啦!
  19. linux系统安装--安装文件大于4G,fat32的硬盘或者优盘无法安装--解决方案
  20. Windows中的工作组和域

热门文章

  1. mount: unknown filesystem type 'smbfs' 问题解决
  2. Spring AOP根据JdbcTemplate方法名动态设置数据源
  3. 片上网络NoC(一)—— 概述
  4. WP博客wordpress,robots.txt写法
  5. 【Linux】Linux-路径切换-相对路径和绝对路径快捷键记录linux 知识点记录
  6. 重学C语言_数据结构与基础语法
  7. 小白 vue-cli 项目打包
  8. 解决chrome安装扩展插件导入.crx文件提示:程序包无效的错误
  9. kafka topic常用命令
  10. Java设计模式之组合Composite模式代码示例