移動キャプチャ Lambda からの std::function の作成
移動のみの型からの std::function の作成移動キャプチャ ラムダとして使用すると、移動コンストラクターの制限によりエラーが発生する可能性があります。この制限は、std::function の定義および構築方法に起因します。
std::function コンストラクターを理解する
std::function コンストラクターは次の中で呼び出すことができます。 2 つの方法:
どちらの場合も、ラムダ (F) は CopyConstructible である必要があります。これは、ラムダを std::function に直接移動できないことを意味します。
さらに、演算子 = はコンストラクターとスワップに関して定義されており、同じ制限が適用されることを意味します。
移動専用タイプの結果
したがって、移動のみの型をキャプチャする移動キャプチャ ラムダからの std::function 。これを試みると、暗黙的に削除されたコピー コンストラクターが原因でコンパイル時エラーが発生します。
代替解決策
この問題を回避するには、次のようにします。 shared_ptr を使用して移動専用型をラップし、ラムダでshared_ptrをキャプチャします。 shared_ptr は型がコピー可能であることを保証し、ラムダから std::function を作成できるようにします。
以上が移動キャプチャ Lambda から `std::function` を作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。