【发布时间】:2017-12-19 13:06:09
【问题描述】:
以下代码无法编译。因为pt 的类型是const std::packaged_task<void()>> 而operator() 不是const。
auto packagedTask = std::packaged_task<void()>>([]{});
auto future = packagedTask.get_future();
auto function = [pt = std::move(packagedTask)]{ (*pt)(); });
这里是解决方法:
auto packagedTask = std::make_shared<std::packaged_task<void()>>([]{});
auto future = packagedTask->get_future();
auto function = [pt = std::move(packagedTask)]{ (*pt)(); });
为什么 lambda 对象中的局部变量是const?
我想让第一个代码工作而没有变通办法的开销。解决问题的最佳做法是什么?
【问题讨论】: