【问题标题】:Difference between lambda and member function pointerlambda和成员函数指针的区别
【发布时间】:2022-10-16 10:30:21
【问题描述】:

在我的回答here 中,Barry 指出最好打电话给views::transform(&Planter::getPlants),因为views::transform([](Planter const& planter){... 不小心复制了。

#if 1
    auto plants = planters
        | std::views::transform([](Planter const& planter){ return planter.getPlants();})
        | std::views::join
        | std::views::common
        ;
// Plant copy constructor
// Plant copy constructor
// Plant copy constructor
// Plant copy constructor
// Plant copy constructor
#else
    auto plants = planters
        | std::views::transform(&Planter::getPlants)
        | std::views::join
        ;
#endif
// Plant copy constructor
// Plant copy constructor

这里Plantint 的包装,Planterstd::vector<int> 的包装。

https://godbolt.org/z/dr7PM5Tvd

【问题讨论】:

    标签: c++ std-ranges


    【解决方案1】:

    哦,我真的知道这个。 lambda 的推导返回类型实际上衰减了getPlants 的 const ref 限定符。

    您可以通过将 lambda 的返回类型声明为 decltype(auto) 来解决此问题

    views::transform([](Planter const& planter) -> decltype(auto){...});
    

    https://godbolt.org/z/ocK5PG1z1

    【讨论】:

      猜你喜欢
      • 2012-10-03
      • 2018-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多