作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
让我们考虑以下代码用于阶乘函数的编译时评估:
#include <concepts>
template <std::integral auto num>
struct factorial {
constexpr static auto val{num * factorial<num - 1>::val};
};
// Note: This only specializes the class for (int)0
template <>
struct factorial<0> {
constexpr static auto val{1};
};
// ...
factorial<4>::val; // Ok: 24
factorial<4u>::val; // error: template instantiation depth exceeds maximum of 900
// This makes sense: There's no factorial<0u> specialization.
有没有办法引入专精factorial<0>
对于所有整数类型(即所有满足 std::integral
的类型)?
当然,我想避免实际写出专业 factorial<0u>
, factorial<0l>
,等等。
最佳答案
您可以部分专门化任何比较相等的值,而不是显式地专门针对 0
(即一个 int
的值为 0
)到0
:
template <std::integral auto I> requires (I == 0)
struct factorial<I> {
static constexpr auto val = 1;
};
如果您愿意,也可以这样拼写:
template <class T, T I> requires (I == 0)
struct factorial<I> {
static constexpr auto val = 1;
};
但我认为没有办法将 T{0}
推断为值。
关于c++ - 专门针对受约束的非类型参数模板化的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73158620/
考虑一个相关矩阵 r,表示变量 1 到 10 之间的相关性: r thr)) NA else sum(score[x]) }) min(summed_score, na.rm=T) ## [1] 1
我在 firebase 中有一个值需要增加,它受竞争条件的影响,所以我更愿意一次完成所有这些。 node: { clicks: 3 } 我需要设置 clicks = cli
我是一名优秀的程序员,十分优秀!