次のコードはコンパイルされません。 pt
のタイプがconst std::packaged_task<void()>>
であり、operator()
がconst
ではないためです。ラムダオブジェクトでラムダオブジェクトのローカル変数がなぜconstであるのですか?
auto packagedTask = std::make_shared<std::packaged_task<void()>>([]{});
auto future = packagedTask->get_future();
auto function = [pt = std::move(packagedTask)]{ (*pt)(); });
なぜローカル変数const
のとおりです。ここで
auto packagedTask = std::packaged_task<void()>>([]{});
auto future = packagedTask.get_future();
auto function = [pt = std::move(packagedTask)]{ (*pt)(); });
は、回避策ですか? 回避策にオーバーヘッドなしで最初のコードを動作させたいと思っています。問題を解決するベストプラクティスは何ですか?
ありがとう!私はラムダオブジェクトを'std :: f 'std :: package_task'でラムダを割り当てることはできません:' std :: function f = [pt = std :: move(packagedTask)]()mutable {pt(); }; ' –
Viktor
' std :: function'は、移動専用コールをサポートしていません:https://stackoverflow.com/questions/25330716/move-only-version-of-stdfunction –