テンプレートを使用した Lambda から std::function への変換
C では、テンプレートを使用して lambda 関数を std::function に変換できます。やりがいのある仕事。これを達成するには、テンプレートの型推定が不可欠ですが、特定のシナリオでは制限に直面する可能性があります。
最初は、テンプレート パラメーターが欠落しているか、候補マッチングの不一致により、ラムダを std::function に変換しようとすると失敗する可能性があります。 。これを解決するには、 std::function
この問題に対処するには、より微妙なソリューションが必要です。テンプレート型推論ではラムダから std::function テンプレート パラメーターを直接推論できませんが、追加の型制約を提供することで誘導できます。
次のアプローチを検討してください。構造体 ID でラムダ関数をラップします。
template <typename T> struct identity { typedef T type; }; template <typename... T> void func(typename identity<std::function<void(T...)>>::type f, T... values) { f(values...); }
int main() { func([](int x, int y, int z) { std::cout << (x*y*z) << std::endl; }, 3, 6, 8); return 0; }
以上がテンプレートを使用して汎用 C Lambda を std::function に効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。