模板是C++一个非常灵活的语言特性,其中模板有一些非常奇特的用法,其中最为奇特的一种用法就是模板元编程。
模板元编程是指在模板实例化的同时利用编译器去完成一些计算任务。
通过模板元编程,可以把一些需要在运行时计算的任务放到编译时来做,从而提高程序的运行时效率。
介绍两个例子,简单介绍模板元编程。
1:写程序时,通常需要定义一些常量,静态数组的大小常常由常量决定——或者是一个常量本身,或者是由常量构成的表达式,但有时候所需的数组大小不能通过常量的简单运算来表示。
我们希望以常量的阶乘作为一个静态数组的大小,该怎么办?
解:
template<unsigned N>
struct Factorial
{
enum { VALUE = N * Factorial<N - 1>::VALUE};
};
template<>
struct Factorial<0>
{
enum{VALUE = 1};
};
注:可以将struct改成class,但需要将VALUE设置成public属性。
const int M = 6;
int array[Factorial<M>::VALUE];
第二个例子将在下一章介绍。