简化可变参数模板:删除一些专用项
Simplify variadic template: Remove some specializations
我找到了一个模板来计算二项式系数,我很高兴地将其用于函数生成。优点是我使用此模板进行编译时伯恩斯坦多项式生成,而不是使用派生多项式(只有 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);
}
例
相关文章:
- .cpp和.h文件中的模板专用化声明
- 将数组的地址分配给变量并删除
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C/C++编译器通常会删除重复的库吗
- 从链接列表c++中删除一个项目
- C++如何通过用户输入删除列表元素
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 调用专用模板时出错"no matching function for call to [...]"
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 使用函数"remove"删除重复元素
- 如何从多映射中删除特定的重复项
- 运算符C++ "delete []"仅删除 2 个前值
- 模板专用化(按容器):value_type
- 删除指向指针的指针是运行时错误吗
- 将指针设置为"nullptr"并不能防止双重删除?
- 删除 std::future 和 std::p romise 的空白专用化
- unique_ptr<T> 用于数组专用化的 lambda 自定义删除器
- 从C++14模板专用化中删除constexpr