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


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

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

我如何完美前进 auto && 参数 C++14 lambda表达式?

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

(尝试谷歌,但没有对我选择的关键字有任何好评)


12572
2018-06-10 21:39


起源



答案:


是的,他们可以通过以下方式完美转发 decltype() 符:

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

DEMO


13
2018-06-10 21:46



static_cast 代替 std::forward 更合适一点。由于 std::forward< T >() 与...完全相同 static_cast< T && >() 和 T 这里总是参考。 - Orient


答案:


是的,他们可以通过以下方式完美转发 decltype() 符:

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

DEMO


13
2018-06-10 21:46



static_cast 代替 std::forward 更合适一点。由于 std::forward< T >() 与...完全相同 static_cast< T && >() 和 T 这里总是参考。 - Orient