模板元编程的好处

   template <unsigned long N>
   struct binary
   {
       static unsigned const value
          = binary<N/10>::value << 1   // prepend higher bits
            | N%10;                    // to lowest bit
   };

  

   template <>                           // specialization
   struct binary<0>                      // terminates recursion
   {
       static unsigned const value = 0;
   };

 

 

 

 

 

元编程(metaprogram),按字面上意思说就是“程序的程序”,它是一段程序,用来处理其他程序。比如咱们的编译器,可以处理咱们的代码成中间语言或者机器语言。YACC就是一个典型的代表。

元编程在C++中的具体体现是可以使用模板来实现。一般由算法构成模板和特化模板组成。算法构成模板用来描述具体解决方法,特化用来终结模板算法。

比如上面那段程序,前一段binary可以启动具体算法,而后面的binary<0>就是它的一个终结特化。

整个程序可以用来计算二进制转十进制,如 int k = binary<1001>::value 则可以得到二进制数1001转化为10进制的结果。

元编程有什么好处?

—— 它能打破编译器对你程序特性的限制,可以将一些计算移到编译时期(compile-time),节省在运行时(runtime)的计算时间。

所以我觉得它非常适合于封装底层代码,这样能极大效率的提高上层复用时的效率。将计算在编译期搞定。

另外C++的“准标准库”boost中提供了一个模板元编程的框架,叫MPL(Boost Metaprogramming Library),据说非常优美,我是没空去看了……

总之我觉得最大的亮点就是C++的模板元编程提供了可以在编译级别解决问题的方法,但其也有局限性,比如计算的肯定是内部生成的数据,而不能引用外部变量。——所以很适合底层封装度高的程序,上层会很受益。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值