c++ - 简化可变参数模板 : Remove some specializations

标签 c++ c++11 templates template-meta-programming

我找到了一个计算二项式系数的模板,我很高兴地用它来生成函数。优点是我将此模板用于编译时 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;
};

最佳答案

您可能会使用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/

相关文章:

C++:字段的类型不完整

c++ - 使用 std::deque 时重定位赋值

c++ - 使用特化测试类中值的存在

c++ - 将 unsigned long 除以 size_t 并将结果分配给 double

c++ - 获取唯一编号并知道它们何时被释放

c++ - 如何通过STL容器和算法库计算两个 vector 的内积?

c++ - a = 0; b = (a++, a + 1) ;未定义的行为(UB)?

templates - 样式表不适用于使用 chi 路由器的 go html 模板

c++ - 模板特化函数 C++

C++ 模板宏快捷方式