この記事では、ラムダ式の変換の課題について説明しますテンプレートを使用して、任意のパラメータと型を std::function オブジェクトに追加します。繰り返しの試みにもかかわらず、作者は直接的なアプローチとテンプレートベースのアプローチの両方で障害に直面しました。
この変換の背後にある動機は、可変個引数テンプレートを使用した C でのカリー化の実装に由来しています。ただし、この手法は、ラムダを引数として可変引数関数に渡そうとするときに問題が発生します。
主な課題は、テンプレート型推論が推論できないことです。ラムダ式のみに基づいた std::function の正しいテンプレート引数。これは、テンプレートの型推論では型変換が考慮されないためです。
回避策の 1 つは、ID 型内でラムダ引数をラップすることです。これにより、コンパイラは型推論中にラムダの依存関係を無視できます。ただし、このアプローチには追加のパラメータが必要であり、目的のユースケースと一致しない可能性があります。
明示的なテンプレート パラメータの指定が望ましくなく、他の控除可能な引数が利用できない状況では、コンパイラが目的の std::function テンプレート タイプを推測することができなくなります。この制限により、明示的なパラメーターの指定や追加の引数を使用せずに、ラムダを std::function オブジェクトに直接変換することができなくなります。
以上がC でテンプレートを使用して Lambda を std::function に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。