标签:style blog http color io cti
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie
经验:Template metaprogramming (TMP, 模板元编程)可将工作由运行期移往编译期,因而得以实现早期错误侦测和更高的执行效率
示例1:
template<typename IterT, typename DistT> void advance(IterT &iter, DistT d){ if(typeid(typename std::iterator_traits<IterT>::iterator_catogory) == typeid(std::random_access_iterator_tag)){ iter += d; }else{ if(d >= 0) { while(d--) ++iter;} else {while(d++) --iter;} } } std::list<int>::iterator iter; advance(iter, 10); //当这里调用时,将会具体化出下面的函数 void advance(std::list<int>::iterator &iter, int d){ if(typeid(typename std::iterator_traits<std::list<int>::iterator>::iterator_catogory) == typeid(std::random_access_iterator_tag)){ iter += d; //编译出错。因为 std::list<int>::iterator 不支持 += }else{ if(d >= 0) { while(d--) ++iter;} else {while(d++) --iter;} } }
template<unsigned n> struct Factorial{ enum {value = n * Factorial<n-1>::value }; //enum hack, 声明一个名为 value 的 TMP 变量来保存当前计算所得的阶乘值 }; template<> //全特化。 当 Factorial<0> 的值是1 struct Factorial<0>{ enum {value = 1}; }; int main(){ std::cout << Factorial<5>::value; }
Effective C++ Item 48 认识 template 元编程,布布扣,bubuko.com
Effective C++ Item 48 认识 template 元编程
标签:style blog http color io cti
原文地址:http://blog.csdn.net/zhengsenlie/article/details/37871113