龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

细说C++委托和消息反馈模板(1)(4)

时间:2011-04-12 23:18来源:未知 作者:admin 点击:
分享到:
结论 我们关于桥式委托的讨论接近尾声了,大家也许已经发现了一个巨大的问题:上面的桥式委托无法给相应操作传递参数!!!是的,这是一个巨大的矛盾

结论

我们关于桥式委托的讨论接近尾声了,大家也许已经发现了一个巨大的问题:上面的桥式委托无法给相应操作传递参数!!!是的,这是一个巨大的矛盾——你必须自己实现带一个参数的桥、自己实现带2个参数的桥……就像stl的functor一样,你无法做到参数通用处理,必须区分unary_functor、binary_functor……你不得不这么做:

  1. templateclass P1>  
  2. struct DelegationInterface { virtual void Run(P1 param) = 0; };  
  3. templateclass T, class P1>  
  4. struct DelegationImpl : public DelegationInterface<P1> {  
  5. ......  
  6. }  
  7. templateclass P1>  
  8. struct Signal {  
  9. DelegationInterface<P1> *_PI;  
  10. ......  

以上、你会发现自己写了太多桥了,当然了,你可以绕路来实现,比如用一个通用的打包参数来包装多个参数,用宏定义来处理各种情况,当然也可以用预处理来实现——我这里要说的,同情一下QT吧,不要整天抱怨他的signal/slot体系需要预处理是在扩展语言——设身处地地想一想,C++提供给我们的就这有这些了,一个小小的参数是我们这些signal/slot抹不去的伤痛。

幸运的是,在C++标准委员会不断的努力之下,这些情况开始有所改善。boost库之中的signal库可以直接支持可变参数的委托;同时,越来越多的元语言技术也引入了C++之中。虽然目前支持这些新特性的编译器还比较少,不过这已经是非常巨大的进步了,让我们期待吧!

精彩图集

赞助商链接