我找到了一个计算二项式系数的模板,我很乐意用它来生成函数。优点是我使用这个模板进行编译时Bernstein多项式生成,而不是使用派生多项式(只有5个非常简单的)。
我最初认为代码会变得更容易,因为现在五个随机函数的生成显而易见。不幸的是,对于不习惯模板的人来说,下面的代码很难阅读。有没有办法摆脱至少一些模板专业化?
// Template functions to estimate the binominal coefficient
template<uint8_t n, uint8_t k>
struct binomial {
static constexpr int value = (binomial<n - 1, k - 1>::value + binomial<n - 1, k>::value);
};
template<>
struct binomial<0, 0> {
static constexpr int value = 1;
};
template<uint8_t n>
struct binomial<n, 0> {
static constexpr int value = 1;
};
template<uint8_t n>
struct binomial<n, n> {
static constexpr int value = 1;
};
答案 0 :(得分:4)
您可能使用 constexpr 函数。这是 C ++ 11 友好版本:
constexpr int factorial(int n)
{
return (n == 1) ? 1 : n * factorial(n - 1);
}
constexpr int bin_coeff(int n, int k)
{
return factorial(n) / factorial(n - k) / factorial(k);
}