2015-06-10 3 views
11

Für Template-Funktionen verwende ich perfekt Weiterleitung wie folgt aus:Können `auto &&` Parameter perfekt weitergeleitet werden?

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

Wie perfektionieren ich vorwärts auto && Parameter in C++14 Lambda-Ausdrücke?

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

(Versuchte es zu googeln, aber keine guten Zugriffe auf die Keywords, erhalte ich nahm nicht)

Antwort

13

Ja, sie können mittels decltype() Spezifizierer perfect-weitergeleitet:

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

DEMO

+0

'static_cast' anstelle von' std :: forward' etwas besser geeignet. Wegen 'std :: forward < T >()' ist sematisch identisch mit 'static_cast < T && >()' und 'T' ist hier immer ein Verweis. – Orient