将进行类型参数代替作为一种方便的方法,这意味着产生了一种支持编译时编程的机制,这样的程序称为模板元程序(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
}