捕获参数是否从右值lambda复制?

问题描述 投票:5回答:1

在将lambda转换为std::function期间是否复制了捕获的参数?我需要将捕获不可复制类型的lambda转换为std::function。因此我将lambda作为右值传递给std::function,但发生了错误。

// Foo is non-copyable.
auto a = [f = Foo()]{ };
std::function<void()> b = std::move(a) // error, calls deleted Foo::Foo(const Foo&);
c++ c++11 lambda std-function
1个回答
3
投票

是,std::function要求功能对象为std::function,并且不能与仅移动功能​​对象一起使用。

类型要求

您可以像CopyConstructible一样将lambda包装到std::reference_wrapper中,但随后必须注意lambda对象的生存期。或者您可以尝试停止使用std::reference_wrapper并直接使用lambda;特别是在模板上下文中。

© www.soinside.com 2019 - 2024. All rights reserved.