Vio*_*ffe 4 c++ templates c++14 c++17
这就是我在努力工作(并且失败).这个想法count<N>必须等于N.这是一个更复杂的计算的简化情况,不介意这个代码的明显愚蠢.
template <>
constexpr size_t count<0> = 0;
template <auto N>
constexpr size_t count = 1 + count<static_cast<size_t>(N) - 1>;
int main()
{
return count<1>;
}
Run Code Online (Sandbox Code Playgroud)
它不编译:
<source>:5:23: error: expected initializer before '<' token
constexpr size_t count<0> = 0;
^
Run Code Online (Sandbox Code Playgroud)
如果我将一般情况与特殊化交换,它也不会编译.它甚至可以用变量模板吗?
这是代码的正确版本:
template <auto N>
constexpr size_t count = 1 + count<static_cast<size_t>(N) - 1>;
template <>
constexpr size_t count<static_cast<size_t>(0)> = 0;
Run Code Online (Sandbox Code Playgroud)
请注意以下事项:
count<0>和count<static_cast<size_t>(0)>不同,因为他们的论点有不同的类型.在原始代码中,您提供显式特化count<0>,此特化不会count<1>在主模板定义中指定的递归中使用,这就是无限递归发生的原因.| 归档时间: |
|
| 查看次数: |
132 次 |
| 最近记录: |