2015-06-10 13 views
11

Per le funzioni template utilizzare il trasferimento perfetto come questo:I parametri `auto &&` possono essere inoltrati in modo perfetto?

template<typename T> 
void f (T && v) 
{ 
    g (std::forward<T> (v)); 
} 

Come faccio a Perfect Forward auto && parametri in C++14 espressioni lambda?

auto f = [] (auto && v) 
    { 
    g (std::forward<??> (v)); 
    }; 

(Ho cercato di google per esso, ma non ha ottenuto alcun buoni visite per le parole chiave che ho preso)

risposta

13

Sì, possono essere perfetti-inoltrati mediante decltype() specifier:

auto f = [](auto&& v) 
{ 
    g(std::forward<decltype(v)>(v)); 
    //    ~~~~~~~~~~^ 
}; 

DEMO

+0

'static_cast' invece di' std :: forward' un po 'più adatto. A causa di 'std :: forward < T >()' è semicalmente identico a 'static_cast < T && >()' e 'T' qui è sempre riferimento. – Orient

Problemi correlati