C の再帰的ラムダ関数 : コンパイルのジレンマ
再帰的ラムダ関数を設計する際に、コンパイル エラーが発生する可能性があります。当面の問題を詳しく調べて、その解決策を探ってみましょう。
提供されたラムダ関数 sum は、値の範囲にわたる数学演算の結果、term を累積します。再帰的にするために、参照によって合計ラムダをキャプチャしようとしました: [term, next, &sum](int a, int b)。
ただし、このアプローチではコンパイル エラーが発生します。これは、auto で宣言されたラムダ関数と、完全に指定された型を持つラムダ関数の根本的な違いから生じます。
auto で推論された Lambda 関数は、初期化から型を派生します。ただし、再帰ラムダを作成する場合、ラムダにはまだ独自の型がありません。これにより競合が発生します。ラムダのクロージャはその型を知る必要がありますが、まだ決定していません。
この問題を解決するには、std::function 変更されたコード:std::function
この変更により、コンパイラに必要な型情報が提供されます。これにより、再帰ラムダ関数が意図したとおりにコンパイルおよび実行できるようになります。
以上がC の再帰 Lambda 関数がコンパイル エラーを引き起こすのはなぜですか?また、それらはどのように解決できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。