模板元编程:求N的阶乘

求N的阶乘,要求不使用乘除法,for,while,if,else,switch,case等关键字以及条件判断语句?:

template <int SUM,int N>
struct Mul;

template <int N>
struct Fact
{
	enum {sum = Mul<Fact<N-1>::sum,N>::sum};
};

template <>
struct Fact<1>
{
	enum {sum = 1};
};


template <int SUM,int N>
struct Mul
{
	enum {sum = SUM+Mul<SUM,N-1>::sum};
};

template <int SUM>
struct Mul<SUM,1>
{
	enum {sum = SUM};
};


原文地址:https://www.cnblogs.com/SammyLan/p/1880021.html