可变参数值模板的部分特化

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)

Yak*_*ont 1

不,包推导后模式匹配在 C++ 中不起作用。

推导出包后,就没有任何匹配成功了。曾经。

扩展包后可能会发生模式匹配,但包无法推断类型然后继续匹配任何内容。

一个单独的列表是你能做的最好的事情。