从移动捕获 Lambda 创建 std::function
从仅移动类型创建 std::function,例如作为移动捕获 lambda,由于移动构造函数的限制,可能会导致错误。这个限制源于 std::function 的定义和构造方式。
理解 std::function 构造函数
std::function 构造函数可以在两种方式:
在这两种情况下,lambda (F) 必须是可复制构造的。这意味着您无法将 lambda 直接移至 std::function 中。
此外,运算符 = 是根据构造函数和交换定义的,这意味着应用相同的限制。
仅移动类型的后果
因此,不可能从 a 构造 std::function捕获仅移动类型的移动捕获 lambda。由于隐式删除的复制构造函数,尝试这样做将导致编译时错误。
替代解决方案
要解决此问题,您可以使用一个shared_ptr来包装仅移动类型,然后在lambda中捕获shared_ptr。 Shared_ptr 将确保类型是可复制的,允许您从 lambda 创建 std::function。
以上是如何从移动捕获 Lambda 创建'std::function”?的详细内容。更多信息请关注PHP中文网其他相关文章!