2015-06-10 12 views
11

Dla funkcji szablonu używam doskonałe przekazywanie takiego:Czy parametry "auto &&" mogą być perfekcyjnie przekazywane?

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

Jak Perfect Forward auto && parametry C++14 wyrażeń lambda?

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

(Próbowano google dla niego, ale nie dostać jakieś dobre hity na słowa kluczowe Wybrałem)

Odpowiedz

13

Tak, mogą być idealnym-przekazany za pomocą decltype() specyfikatorem:

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

DEMO

+0

'static_cast' zamiast' std :: forward' trochę bardziej odpowiednie. Z powodu 'std :: forward < T >()' jest sematycznie identyczny z 'static_cast < T && >()', a 'T' jest tutaj zawsze odniesieniem. – Orient

Powiązane problemy