是否有任何常规模式可以找出将...放在模板中的位置?
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
我对使用模板参数包时应该放置 ...
的位置感到困惑。
例如,在模板参数列表中,我们应该使用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