我刚刚(再次)实现了一个递归模板,用于在编译时计算整数的阶乘(谁曾想过有一天我真的需要它!).尽管如此,我还是去找Boost寻找答案,而不是自己动手.但是,特殊数学中的阶乘函数特别禁止它使用整数类型,所以我只写了自己的.
仍然,我应该使用Boost中的另一个功能吗?我应该将我的整数转换为double并使用该boost::factorial函数吗?计算是在编译时执行的吗?
考虑以下关于积分pow的元函数(这只是一个例子):
class Meta
{
template<int N, typename T> static constexpr T ipow(T x)
{
return (N > 0) ? (x*ipow<N-1>(x))
: ((N < 0) ? (static_cast<T>(1)/ipow<N>(x))
: (1))
}
};
Run Code Online (Sandbox Code Playgroud)
如何为这样的函数写停止条件?