【问题标题】:Can `auto &&` parameters be perfect forwarded?`auto &&`参数可以完美转发吗?
【发布时间】:2015-08-26 09:08:31
【问题描述】:

对于模板函数,我使用这样的完美转发:

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

如何完善 auto &amp;&amp; lambda 表达式中的 auto &amp;&amp; 参数?

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

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

【问题讨论】:

    标签: c++ c++14 perfect-forwarding


    【解决方案1】:

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

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

    DEMO

    【讨论】:

    • static_cast 而不是 std::forward 更合适一点。由于std::forward&lt; T &gt;()static_cast&lt; T &amp;&amp; &gt;()T 在语义上相同,因此这里始终是参考。
    猜你喜欢
    • 2021-06-17
    • 2018-08-08
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 2014-08-23
    • 2019-01-16
    • 2011-09-23
    • 1970-01-01
    相关资源
    最近更新 更多