C++11 bind函数实现原理图
来源:互联网 发布:数据分析入门 python 编辑:程序博客网 时间:2024/06/04 22:10
本文内容来自http://blog.think-async.com/2010/04/bind-illustrated.html, 基本上是对该篇博文的翻译.
bind函数的返回值是一个函数对象/仿函数, 统一的一致性语法。
1、bind函数(包装器/适配器)能够将用户提供的需要一个参数的函数调整为不需要参数的函数对象。需要的时候,绑定的值(这个例子中是123)存储在函数对象中,自动地传递给用户指定的函数。
一个匿名类(即这里的binder类)的成员变量捕获了函数指针的值和绑定的参数的值,匿名类重载了operator()运算符,从而其对象为仿函数/函数对象。在operator函数体内,使用捕获的函数指针和参数,回调函数指针指向的函数。匿名类只会捕获提前绑定的参数。
当用户调用该函数对象时,实现延迟调用。
2、绑定一个参数也可以将类的成员函数调整为不需要参数的函数对象。正如你所知,非静态的成员函数都有一个隐式的this指针参数。这就意味着在函数指针内部需要绑定一个指向该类的一个对象的指针:
匿名类捕获一个指向session的对象的指针作为其成员变量的值。
3、或者,隐式的this指针可以通过给函数对象传入一个显示的参数:
4、函数对象通常同时使用提前绑定的参数和调用时提供的参数。这个过程可以通过给成员函数绑定参数来实现:
这里的_1是std::placeholders命名空间里的占位符,在调用函数对象的时候,参数按对应的顺序传递给占位符。
5、当然也可以使用非成员函数:
6、有的时候,函数对象调用时会提供一些不会被目标函数使用到的参数,bind() 函数会自动的忽略这些多余的参数:
7、多余的参数不需要在函数签名的最后边:
也就是说,提前绑定的参数会使调用时又提供的参数无效而丢弃。
8、bind() 函数允许改变参数的顺序让目标函数能够适应函数对象的函数签名:
从上边的图中可以看出,bind() 函数的原理和lambda函数的原理是类似的,都是通过捕获变量来生成一个匿名的类,在类中重载operator() ,从而其对象是能够调用的函数对象/仿函数。
- C++11 bind函数实现原理图
- std::bind 原理图(转)
- C++bind函数
- 函数bind的实现
- Socket编程(C语言实现):bind()函数英文翻译
- C++11 bind函数
- 【C++】boost::bind和函数对象一起使用实现便捷的异步编程
- c++:使用function模板和bind函数
- Scala callccinterpreter 的bind函数实现
- 利用闭包实现bind函数
- js中bind函数的实现
- Lua bind for C 和 conf 实现
- bind函数
- bind函数
- bind()函数
- bind函数
- bind函数
- C++bind
- impdp导入中碰到的两个问题
- Android初学笔记之<使用真机进行测试Android工程>
- 三++45
- 自学《算法导论》计划
- struts2使用可生成交互的两个列表框的optiontransferselect标签
- C++11 bind函数实现原理图
- [LeetCode] Course Schedule II
- 两栈共享空间
- linux vi使用
- 实现TextView滚动
- web.xml 中的listener、 filter、servlet 加载顺序及其详解
- POJ 3278 Catch That Cow【C语言版】
- Solution to CLRS Chapter 2
- 欢迎使用CSDN-markdown编辑器