| // sumarray.h template <typename T> inline T sum_array(int Dim, T* a) { T result = T(); for (int i = 0; i < Dim; ++i) { result += a[i]; } return result; } |
| // sumarray2.h // 原始模板 template <int Dim, typename T> class Sumarray { public: static T result(T* a) { return a[0] + Sumarray<Dim-1, T>::result(a+1); } }; // 作为终结准则的局部特化版 template <typename T> class Sumarray<1, T> { public: static T result(T* a) { return a[0]; } }; |
| // sumarraytest2.cpp #include <iostream> #include "sumarray2.h" int main() { int a[6] = {1, 2, 3, 4, 5, 6}; std::cout << " Sumarray<6>(a) = " << Sumarray<6, int>::result(a); } |
| Sumarray<6, int>::result(a) = a[0] + Sumvector<5, int>::result(a+1) = a[0] + a[1] + Sumvector<4, int>::result(a+2) = a[0] + a[1] + a[2] + Sumvector<3, int>::result(a+3) = a[0] + a[1] + a[2] + a[3] + Sumvector<2, int>::result(a+4) = a[0] + a[1] + a[2] + a[3] + a[4] + Sumvector<1, int>::result(a+5) = a[0] + a[1] + a[2] + a[3] + a[4] + a[5] |