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

瘦身前后——兼谈C++语言进化(5),第1张

瘦身前后——兼谈C++语言进化(5),第2张

(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));

}

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 瘦身前后——兼谈C++语言进化(5)

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情