簡體   English   中英

使用 std::forward 進行參數包擴展的 '...' 的語法

[英]Syntax of '…' with Parameter Pack Expansion using 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是如何工作的,或者它如何完美地轉發 arguments。

我很感激任何答案!

...適用於它左邊的東西。

  • 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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM