小编Fre*_*yck的帖子

Lambda 函数使用广义捕获不可能吗?

lambda 可以很容易地转换为 std::function ,尽管当 lambda 使用带有 unique_ptr 的广义捕获时这似乎是不可能的。可能缺少底层 std::move 。是否有解决方法,或者这是一个已知问题?

\n
#include <iostream>\n#include <memory>\n#include <functional>\n\nusing namespace std;\n\nint main()\n{\n    auto lambdaGeneralizedCaptureOk = [t = std::make_unique<int>(1)]()\n      {\n        std::cout << *t << std::endl;\n      };\n    lambdaGeneralizedCaptureOk();\n    \n    // error: use of deleted function \xe2\x80\x98std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = int; _Dp = std::default_delete]\xe2\x80\x99\n    std::function<void()> lambdaToFunctionGeneralizedCaptureNok = [t = std::make_unique<int>(2)]()\n      {\n        std::cout << *t << std::endl;\n      };\n    lambdaToFunctionGeneralizedCaptureNok();\n    \n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

c++ lambda std-function

10
推荐指数
1
解决办法
462
查看次数

标签 统计

c++ ×1

lambda ×1

std-function ×1