模板元编程的好处

   template
   struct binary
   {
       static unsigned const value
          = binary::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++的模板元编程提供了可以在编译级别解决问题的方法,但其也有局限性,比如计算的肯定是内部生成的数据,而不能引用外部变量。——所以很适合底层封装度高的程序,上层会很受益。

 

你可能感兴趣的:(学习笔记)