是否有任何常规模式可以找出将...放在模板中的位置?

Is there any regular pattern to figure out where to put ... in templates?

我对使用模板参数包时应该放置 ... 的位置感到困惑。

例如,在模板参数列表中,我们应该使用typename ...Ts,而在参数列表中,它变成了Ts...ts

当实例化模板时,它变成了tuple<Ts...>,我最困惑的是std::forward<Args>(args)......在括号外面。直到那时,我强迫自己只记住这个,直到今天我看到这个:sizeof...(Params),我想我必须了解规则模式以避免进一步混淆。

所以有人可以帮助如何对待 ... 以完全理解放置它的位置吗?

它跟在被重复的事情之后。一个名字后面跟多个名字一样。

template<typename... Ts> 中,我们声明了多个 typename,例如template<typename Ts0, typename Ts1, typename Ts2>.

void foo(Ts... ts)中,我们声明了多个参数,使用了多种类型,例如void foo(Ts0 ts0, Ts1 ts1, Ts2 ts2)

std::tuple<Ts...>中我们使用多种类型来实例化std::tuple,例如std::tuple<Ts0, Ts1, Ts2>

std::forward<Args>(args)...中我们使用了多个表达式,例如std::forward<Args0>(args0), std::forward<Args1>(args1), std::forward<Args2>(args2)

sizeof... 是命名运算符,不同于 sizeof