2015-06-10 12 views
11

Đối với chức năng template tôi sử dụng chuyển tiếp hoàn hảo như thế này:Các tham số `auto &&` có thể được chuyển tiếp hoàn hảo không?

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

Làm thế nào để hoàn thiện mong auto && tham số trong C++14 biểu thức lambda?

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

(Cố gắng google cho nó nhưng đã không nhận được bất kỳ hit tốt trên các từ khóa Tôi nhặt)

Trả lời

13

Vâng, họ có thể được hoàn hảo-chuyển bằng các phương tiện của decltype() specifier:

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

DEMO

+0

'static_cast' thay vì' std :: forward' ít bit phù hợp hơn. Do 'std :: forward < T >()' là giống hệt về mặt ngữ nghĩa với 'static_cast < T && >()' và 'T' ở đây luôn là tham chiếu. – Orient

Các vấn đề liên quan