《Effective C++》读书笔记 条款48:认识template元编程

Template metaprogramming(TMP,模板元编程)是编写template-based C++程序并执行于编译期的过程。

TMP的优点:1.让某些事更容易

2.将工作从运行期转移到编译期,使得错误在编译期就能找出来

3.高效,较小的可执行文件、较短的运行期、较少的内存需求

缺点:使编译时间变长

 

书上TMP的例子,在编译期计算阶乘,通过递归模板具现化

template<unsigned n>
struct Factorial
{
	enum{
		value = n*Factorial<n-1>::value
	};
};
template<>
struct Factorial<0>
{
	enum{value=1};
};
int main()
{
	
	std::cout << Factorial<5>::value<< std::endl;
	std::cout << Factorial<10>::value << std::endl;

	return 0;
}

循环发生在templates具现体Factorial<n>内部指涉另一个template具现体Factorial<n-1>之时。和所有良好的递归一样,我们需要一个特殊的情况造成递归结束,这里的特殊情况是template特化体Factorial<0>.

每个Factorial template具现体都是一个struct,每个struct都使用enum hack 声明一个名为value的TMP变量,value用来保存当前计算所得的阶乘值。如果TMP拥有真正的循环构件,value应该在每次循环内获得更新。但由于TMP是以递归模板具现化取代循环,每个具现体有自己的一份value,而每个value有其循环的的适当值。

 

请记住

1.Template metaprogrammint(TMP,模板元编程)可将工作由运行期移往编译期,因而得以实现早期错误侦测和更高的执行效率

2.TMP可被用来生成“基于政策选择组合”的客户定制代码,也可用来避免生成对某些特殊类型并不合适的代码 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值