模板元编程:求N的阶乘
求N的阶乘,要求不使用乘除法,for,while,if,else,switch,case等关键字以及条件判断语句?:
01 | template < int SUM, int N> |
02 | struct Mul; |
03 | |
04 | template < int N> |
05 | struct Fact |
06 | { |
07 | enum {sum = Mul<Fact<N-1>::sum,N>::sum}; |
08 | }; |
09 | |
10 | template <> |
11 | struct Fact<1> |
12 | { |
13 | enum {sum = 1}; |
14 | }; |
15 | |
16 | |
17 | template < int SUM, int N> |
18 | struct Mul |
19 | { |
20 | enum {sum = SUM+Mul<SUM,N-1>::sum}; |
21 | }; |
22 | |
23 | template < int SUM> |
24 | struct Mul<SUM,1> |
25 | { |
26 | enum {sum = SUM}; |
27 | }; |