可以将'auto &&`参数完美转发吗?

Jus*_*mer 11 c++ perfect-forwarding c++14

对于模板函数,我使用完美转发,如下所示:

template<typename T>
void f (T && v)
{
  g (std::forward<T> (v));
}
Run Code Online (Sandbox Code Playgroud)

如何auto &&C++14lambda表达式中完善前向参数?

auto f = [] (auto && v)
  {
    g (std::forward<??> (v));
  };
Run Code Online (Sandbox Code Playgroud)

(尝试谷歌,但没有得到我选择的关键字的任何好点击)

Pio*_*cki 13

是的,它们可以通过decltype()说明符完美转发:

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

DEMO

  • `static_cast`而不是`std :: forward`更合适一点.由于`std :: forward <T>()`与`static_cast <T &&>()`和`T`在语义上相同,因此始终是引用. (2认同)