我找到了一个计算二项式系数的模板,我很乐意将其用于函数生成。优点是我使用这个模板在编译时生成伯恩斯坦多项式,而不是使用派生多项式(只有 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;
};

最佳答案

您可能会使用 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);
}

EXAMPLE

关于c++ - 简化可变参数模板 : Remove some specializations,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45028677/

10-11 23:10
查看更多