最近学习巨佬的《Effective C++》其中第48条款,下列内容均摘自于该条款,另加上了一点自己的个人见解。
Template metaprogramming(TMP,模板元编程)是编写template-based C++程序并执行于编译器的过程。
TMP有两个伟大的效力
- 1.他让某些事情更容易;
- 2.由于TMP执行于C++编译期间,所以可将工作从运行期转移到编译期;有两大优势:
- ·某些错误原本通常在运行期才能侦测到,现在可在编译期间找出来;
- ·使用TMP的C++程序可能在每一方面更高效:较小的可执行文件、较短的运行期、较少的内存需求;当然存在一个小问题,就是编译时间变长了。
下面给出一个TMP的小例子,在编译期计算阶乘。
template<unsigned n>struct Factorial
{
enum{ value = n * Factorial<n-1>::value };
};
template<>struct Factorial<0> //全特化,用于递归终止
{
enum{ value = 1 };
};
只需要Factorial<10>::value即可得到 10!,因为模板具现化一般在编译期,在模板接收参数n = 10时,就在编译期将Factorial<9>::value等都进行了具现化,从而在运行期间,直接计算而不需要进行迭代展开就得到了结果,极大的提高了程序运行效率。