C++ Templates之模板元编程
#ifndef POW3_H #define POW3_H template <int N> class Pow3 { public: enum{result = 3 * Pow3<N-1>::result}; }; template<> class Pow3<0> { public: enum{result = 1}; }; #endif
此代码计算三的N次方。
#ifndef POW3_H #define POW3_H template <int N,int LO=1,int HI=N> class Sqrt { public: enum{mid = (LO + HI + 1)/2}; enum{result = (N < mid * mid) ? Sqrt<N,LO,mid-1>::result:Sqrt<N,mid,HI>::result}; }; template<int N,int M> class Sqrt<N,M,M> { public: enum{result=M}; }; #endif
此代码计算开方。
偏特化和特化类似于函数重载,参数个数与类型都与普通类型不一样。
一切源于对计算机的热爱