从维基百科上,我看到了一个使用通用编程计算阶乘的示例代码:
template <int N>
struct Factorial
{
enum { value = N * Factorial<N - 1>::value };
};
template <>
struct Factorial<0>
{
enum { value = 1 };
};
我这边写的代码如下:
template <typename T>
T factorial(T n)
{
T x;
if (n == 1)
return 1;
x = n * factorial(n-1);
return x;
}
我在Stackoverflow上读到枚举是通用编程中使用的内容,但没有找到相关理由。
那么为什么使用枚举更好?如果第二段代码存在陷阱怎么办?
T
在编译时被解析,但函数本身依赖于n
,这是一个运行时值。第一个例子在编译时计算,因为该值是模板参数,必须在编译时计算。 - François AndrieuxT
)创建不同种类的该函数。 - Lightness Races in Orbit