小编Max*_*Max的帖子

我应该如何正确地将 packaged_task 移至 lambda?

我一直在尝试将 packaged_task 捕获到 lambda 中,但失败了。
\n我完全理解动作语义,也读过一些现代文学,我想我没有错过任何东西。我还阅读了 Josuttis 的移动语义书,以及关于广义 lambda 捕获的 ISO 主题以及ISO C++ 14 语言扩展
中的类似案例\n我有下一个代码:

\n\n
#include <thread>\n#include <vector>\n#include <functional>\n#include <queue>\n#include <condition_variable>\n#include <mutex>\n#include <future>\n#include <type_traits>\n#include <iostream>\n\n// #include\'s for below code and other purposes\n\nint main() {\n    auto f = []() { return 1; }; \n    std::queue<std::function<void()>> q;\n    std::packaged_task<int()> pack(f);\n    q.emplace([p = std::move(pack)] () mutable { p(); });\n\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这里我创建了简单的函数队列,保存一些“void()”和packaged_task,传递“int”返回类型的“f”。
\n然后我尝试将 packaged_task 移动到 lambda 中以便稍后在其他线程中使用它(我需要在其他线程中使用它,这将在稍后执行它,当“pack”将被销毁时,这就是为什么我不能引用它)
\n看起来一切都很好,但是当我用“g++ main.cpp -o main -std=c++14”(甚至使用c++17)编译它时, g++ 告诉我这个:

\n\n
\n

/usr/include/c++/9/bits/std_function.h:176:6: 错误:使用已删除的函数 \xe2\x80\x98main()::::(const main()::&)\xe2\x80 …

c++ lambda move-semantics packaged-task

6
推荐指数
1
解决办法
1120
查看次数

标签 统计

c++ ×1

lambda ×1

move-semantics ×1

packaged-task ×1