使用 std::forward 扩展参数包的'...'语法



在C++中,参数通常可以直接在参数包的名称后面用...展开。例如,

template <class... Tys>
void function(Tys... params) {
function(params...);
}

但是,当使用std::forward时,...似乎在参数包的名称之后。例如,

template <class... Tys>
void function(Tys... params) {
function(std::forward<Tys>(params)...); // The '...' is outside the parenthesis of 'params'
}

我的问题是为什么会有区别?为什么以下代码不正确?

template<class... Tys>
void function(Tys... params) {
function(std::forward<Tys>(params...));
}

参数包在什么时候展开?我可能不完全理解std::forward是如何工作的,也不完全理解它是如何完美地提出论点的。

我很感激你的回答!

...应用于其左侧的事物。

  • function(params...)

    扩展到

    function(param1, param2, ..., paramN)

  • function(std::forward<Tys>(params)...)

    扩展到

    function(std::forward<Tys1>(param1), std::forward<Tys2>(param2), ..., std::forward<TysN>(paramN))

  • function(std::forward<Tys>(params...))

    扩展到

    function(std::forward<Tys>(param1, param2, ..., paramN))

相关内容

  • 没有找到相关文章

最新更新