首页 > 后端开发 > C++ > 如何从移动捕获 Lambda 创建'std::function”?

如何从移动捕获 Lambda 创建'std::function”?

DDD
发布: 2024-12-24 10:12:37
原创
417 人浏览过

How Can I Create an `std::function` from a Move-Capturing Lambda?

从移动捕获 Lambda 创建 std::function

从仅移动类型创建 std::function,例如作为移动捕获 lambda,由于移动构造函数的限制,可能会导致错误。这个限制源于 std::function 的定义和构造方式。

理解 std::function 构造函数

std::function 构造函数可以在两种方式:

  1. std::function(F f);
  2. std::function(allocator_arg_t, const A& a, F f);

在这两种情况下,lambda (F) 必须是可复制构造的。这意味着您无法将 lambda 直接移至 std::function 中。

此外,运算符 = 是根据构造函数和交换定义的,这意味着应用相同的限制。

仅移动类型的后果

因此,不可能从 a 构造 std::function捕获仅移动类型的移动捕获 lambda。由于隐式删除的复制构造函数,尝试这样做将导致编译时错误。

替代解决方案

要解决此问题,您可以使用一个shared_ptr来包装仅移动类型,然后在lambda中捕获shared_ptr。 Shared_ptr 将确保类型是可复制的,允许您从 lambda 创建 std::function。

以上是如何从移动捕获 Lambda 创建'std::function”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板