3
以下代码不能编译。因为pt
的类型为const std::packaged_task<void()>>
而operator()
不是const
。为什么lambda对象中的局部变量是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)(); });
为什么在拉姆达对象局部变量const
? 我想使第一个代码无需额外工作量即可工作。解决此问题的最佳做法是什么?
谢谢!我需要将lambda对象存储在'的std ::˚F 'std :: move(packagedTask)]()mutable {pt();但是,如果使用'std :: package_task',lambda表达式不能被赋值:'std :: function f = [pt = std :: move };' –
Viktor
'std :: function'不支持可移动的可调用对象:https://stackoverflow.com/questions/25330716/move-only-version-of-stdfunction –