[英]How exactly is expansion of a parameter pack evaluated with 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.