今天在阅读effective c++这本书的时候,接触到了TMP即模板元编程这个知识点,真心觉得发现了新大陆一样。
TMP是编写template-based C++程序并执行于编译器的过程,它可以将程序的执行从运行期转移到编译期,也就是说,编译完成之后,即可得到你想要的结果!很多传统编程做不到的事情,只有TMP可以实现,而且本来运行期才能发现的错误,也可以提前在编译期就被发现,TMP的发展,将是C++的发展新动力。
TMP已经被证明是个图灵完全的机器,意思是它的威力大到足以计算任何事物。使用TMP你可以声明变量、执行循环、编写及调用函数。
夸了这么久,还是举个例子形象一点。。
temlate<unsigned n>
struct Factorial{
enum{value=n*Factorial<n-1>::value};//递归
};
template<>
struct Factorial<0>{
enum{value=1};//特殊情况
};
如此只要指涉Factorial<n>::value就可以得到n的阶乘值,是不是很酷!