raf*_*foo 5 c++ variadic-templates
如果我有一个值模板类
template<int... values>
class A {};
Run Code Online (Sandbox Code Playgroud)
对于尾随 0 的不确定长度序列,我可以“轻松地”(没有模板递归)专门化它吗?
// Pseudo code
template<int... values>
class A<values..., 0...> {};
Run Code Online (Sandbox Code Playgroud)
应该使用专用版本的示例(实际上应该最终匹配每个序列并带有零尾随 0):
A<1, 0>{}; // use overloaded version with overloaded template values = <1>
A<1, 1>{}; // use with values=<1, 1>
A<1, 2, 3, 0, 0, 0>{}; // use with template values = <1, 2, 3>
A<1, 2, 3>{}; // use with values=<1, 2, 3>
Run Code Online (Sandbox Code Playgroud)
不,包推导后模式匹配在 C++ 中不起作用。
推导出包后,就没有任何匹配成功了。曾经。
扩展包后可能会发生模式匹配,但包无法推断类型然后继续匹配任何内容。
一个单独的列表是你能做的最好的事情。