4

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

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

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

那么任何人都可以帮助如何对待它...以充分了解放置它的位置吗?

4

1 回答 1

5

它遵循被重复的事情。后面的名称就像多个名称。

template<typename... Ts>我们声明多个typenames,例如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

于 2020-07-20T08:04:57.537 回答