学习 Boost:bind/Boost::functions closure as delegate in C++

今天分享一篇比较短的博文. 关于Boost bind/function. 

最近读了陈硕的博文 http://blog.csdn.net/solstice/article/details/3066268, 有一些自己的看法, 感觉最后那个麻雀,企鹅的例子没有把bind的妙处表示清楚. 于是自己有了一些思考,分享如下:

1) Boost::function是一些类模板, 实质是函数对象的封装, 也就是把一个回调(函数指针) 封装起来, 使之具有对象的语义, 在对象的生命周期内推迟真正的调用时机.

2) Boost::bind是一个函数对象的工厂, 用来产生需要的函数对象. 从Boost的文档里得知, 其可用于函数,函数对象,成员函数,函数指针等多种回调类型.

3) 这个东西, 个人认为并没有很多东西, 是Boost提供的对委托/回调的一种比较干净优雅的解决方案.

那这个东西到底有什么用? 该何时使用呢? 个人浅见, 欢迎拍砖:

1) 使用Boost::bind的委托对象, 如果封装的是对象的方法, 则在创建的时候就传入了对象实例, 调用的时候不需要对象实例.

2) 封装/定义回调的方法比函数指针要简洁.

3) 不是说这个东西要代替OO, 回调/委托和OO虚函数是不同的技术, 各自有适用的问题域. 如果是对象族有公共的行为或状态,  使用继承和多态是合理的. 如果对象间的协作和调用具有较少的公共行为, 可以使用委托和回调组合对象的行为, 用继承的显得笨重.

来个例子建模上述观点:

有很多小动物, 有企鹅, 可以跑,可以游泳, 有麻雀, 可以跑, 可以飞, 有聪明的猴子,会跑, 会骑车, 还有小马, 擅长跑.

现在来举办一场动物的铁人三项赛, 有跑步, 游泳, 骑自行车三个子项目, 请选择合适的选手, 编程实现比赛.

分析:

1) 动物对象的协作和调用似乎具有较少的公共行为, 跑,游泳, 骑车, 飞, 似乎用虚函数建模不会有明显的收益.

2) 赛事对象的关键是跑步, 游泳, 骑

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值