免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7006 | 回复: 10
打印 上一主题 下一主题

std/boost的bind函数,占位符的实现原理究竟是什么? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-05-19 23:16 |只看该作者 |倒序浏览
20可用积分
本帖最后由 moonsister02 于 2012-05-20 13:18 编辑

也就是_1,_2这样的placehodler,从源代码直接看是一个很复杂的类型定义,没有看懂。
网上的教材又基本上是在说用法。

我想知道这个东西是实现机制到底是怎么样的? 谢谢.

最佳答案

查看完整内容

最简原理已经说了.更具体的用google 搜索"boost::bind 剖析"

论坛徽章:
0
2 [报告]
发表于 2012-05-19 23:16 |只看该作者
最简原理已经说了.更具体的用google 搜索"boost::bind 剖析"

论坛徽章:
0
3 [报告]
发表于 2012-05-20 13:11 |只看该作者
自己顶一下!

论坛徽章:
0
4 [报告]
发表于 2012-05-20 16:57 |只看该作者
不是复杂不复杂,是人根本就看不懂,一般也不用看懂,扭曲语言,及其丑陋。

非要用,新语法有Lambda,基本也不用function/bind这种

论坛徽章:
0
5 [报告]
发表于 2012-05-20 18:17 |只看该作者
原理简单得很,就是定义一些不容易和用户撞车的类.然后利用函数重载分发功能.
bind(func,_1)=>分发到一个重载了_1类的bind函数建立设施获取第一参数.
bind(func,_2,_1)=>分发到重载了_2类和_1类的bind函数建立设施获取参数后交换下参数调用.


当然要实现出来就有很多实际问题了

论坛徽章:
0
6 [报告]
发表于 2012-05-20 18:37 |只看该作者
yjh1982 发表于 2012-05-20 18:17
原理简单得很,就是定义一些不容易和用户撞车的类.然后利用函数重载分发功能.
bind(func,_1)=>分发到一个重 ...


能否给个链接或者文档来详细说明一下你的解释呢?
谢谢!

论坛徽章:
0
7 [报告]
发表于 2012-05-21 21:20 |只看该作者
实现这个东西需要枚举各种可能的可调用体的形式
比如1个参数的函数,2个参数的函数,一直到n个参数的函数
比如1个参数的成员函数,2参数的成员函数,一直到n个参数的成员函数

论坛徽章:
0
8 [报告]
发表于 2012-05-22 17:23 |只看该作者
我自己实现过boost::bind/function, 是为了方便编写自己的网络通讯库.
基本原理是将 对象实例地址和对象成员函数的偏移指针 或 是静态/全局函数的函数指针保存到function类对象中, 并通过模板和函数重载的技术将参数拷贝到该对象中, 执行重载了的()符号时就会执行该函数指针.
我的网络通讯库目前还没开源, 有兴趣可以关注我的技术微博:http://weibo.com/u/2263309160, 里面有提到一二.

论坛徽章:
0
9 [报告]
发表于 2012-05-23 10:15 |只看该作者
<Beyond the C++ Standard Library> 有非常详细的解释.

论坛徽章:
0
10 [报告]
发表于 2012-05-23 10:57 |只看该作者
回复 8# lyjdamzwf

竟然和我一样。。。我也是自己实现boost/function中的部分功能,也是为了做网络库。。。。。


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP