模板--模板元编程

将进行类型参数代替作为一种方便的方法,这意味着产生了一种支持编译时编程的机制,这样的程序称为模板元程序(template metaprogram)(因为正在"为一个程序进行编程"),事实证明可以用它做很多事情。实际上,模板元编程就是完全的图灵机(Turing complete),因为它支持选择(if-else)和 循环(通过递归)。从理论上讲,可以用它执行任何计算。下面看几个例子。

注: 图灵机: 支持选择和循环,并具有使用变量随机数的能力,图灵机被认为具有表达任意算法的能力。


#include <iostream>
using namespace std;

template<int n> struct Factorial 
{
	enum { val = Factorial<n-1>::val*n};
};

template<> struct Factorial<0>
{
	enum { val = 1};
};

void main()
{
	cout<<Factorial<6>::val<<endl;//720
}

程序输出了参数 6! 实例化后的正确值!并没有警告发出。


#include <iostream>
using namespace std;

template<int n> struct Fib 
{
	enum { val = Fib<n-1>::val + Fib<n-2>::val };
};

template<> struct Fib<0>
{
	enum { val = 0 };
};

template<> struct Fib<1>
{
	enum { val = 1 };
};

void main()
{
	cout<<Fib<5>::val<<endl;//5
	cout<<Fib<20>::val<<endl;//6765
}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值