神奇的模板元编程——TMP

最近学习巨佬的《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等都进行了具现化,从而在运行期间,直接计算而不需要进行迭代展开就得到了结果,极大的提高了程序运行效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值