瘦身前后——兼谈C 语言进化(5)

文章作者 100test 发表时间 2008:03:29 14:16:39
来源 100Test.Com百考试题网


(4)  这里function_invoker是用的type-erase手法,具体可参见我以前写的boost.any源码剖析,或上篇讲auto的,或《C Template Metaprogramming》(内有元编程慎入!)。type-erase手法是像C 这样的弱RTTI支持的语言中少数真正实用的手法,某种程度上设计模式里面的adapter模式也是type-erase的一个变种。

  如果还觉得不够的话,可以参考variadic-templates的主页,上面的variadic templates proposal中带了三个tr1实现,分别是tuple,bind,function,当然,variadic-templates的好处远远不仅仅止于这三个实现,从本质上它提供了一种真正直接的表达意图的工具,完全避开了像下面这种horrible的workaround:

template

cons(T1&. t1, const null_type&., const null_type&., const null_type&.,

const null_type&., const null_type&., const null_type&.,

const null_type&., const null_type&., const null_type&.)

: head (t1) {}

  tuple的C 98实现,代码近千行。利用variadic-templates实现,代码仅百行。

  和这种更horrible的workaround:

template

_bi::bind_t::type>

BOOST_BIND(boost::type, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)

{

typedef typename _bi::list_av_6::type list_type.

return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5, a6)).

}


相关文章


笔译中级:十秒钟翻译训练(二十)
笔译中级:十秒钟翻译训练(十九)
Vista在不经过UAC的允许下安装驱动程序
使用WindowsVistaBitLocker加密硬盘
瘦身前后——兼谈C 语言进化(5)
瘦身前后——兼谈C 语言进化(4)
瘦身前后——兼谈C 语言进化(3)
瘦身前后——兼谈C 语言进化(2)
瘦身前后——兼谈C 语言进化(1)
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛