C では、関数ポインターは std::function テンプレートを通じて関数オブジェクトに変換できます。関数ポインターを関数オブジェクトにラップするには、std::function を使用します。 std::function::target メンバー関数を使用して、関数オブジェクトを関数ポインターに変換します。この変換は、イベント処理、関数コールバック、汎用アルゴリズムなどのシナリオで役立ち、柔軟性とコードの再利用性が向上します。
C では、関数ポインタと関数オブジェクトは密接に関連した 2 つの概念であり、これを使用して作業を行うことができます。より柔軟な方法で機能します。場合によっては、関数ポインターを関数オブジェクトに、またはその逆に変換することが必要な場合があります。
std::function
テンプレートを使用して、関数ポインタを関数オブジェクトに変換できます。 std::function
任意の呼び出し可能なエンティティ (関数ポインターを含む) を受け入れ、呼び出し可能なオブジェクトでラップします。
// 函数指针 int add(int a, int b) { return a + b; } // 转换为函数对象 std::function<int(int, int)> add_fn = add; // 调用函数对象 int result = add_fn(10, 20); // 结果为 30
関数オブジェクトを関数ポインターに変換するには、std::function::target
メンバー関数を使用できます。この関数は、関数オブジェクトの基になる関数への関数ポインターを返します。
std::function<int(int, int)> add_fn = [](int a, int b) { return a + b; }; // 转换为函数指针 int (*add_ptr)(int, int) = add_fn.target<int (*)(int, int)>(); // 调用函数指针 int result = add_ptr(10, 20); // 结果为 30
次のシナリオでは、関数ポインタを関数オブジェクトに、またはその逆に変換すると便利な場合があります:
std::function
呼び出し可能なエンティティを汎用アルゴリズムに渡すために使用できるため、柔軟性が得られます。 関数ポインターと関数オブジェクト間の変換を理解することで、より柔軟で再利用可能なコードを作成できます。
以上が関数ポインタを関数オブジェクトに、またはその逆に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。