汎用関数ポインターは、さまざまな型とパラメーター数の関数を指す C のポインターです。ジェネリック関数ポインターを作成するには、関数の戻り値の型とパラメーターの型のタプルを指定するテンプレートを使用する必要があります。ジェネリック関数ポインターは、関数ポインターを宣言し、関数ポインターに関数を割り当て、関数ポインターが指す関数を呼び出す構文で使用できます。実際の場合、ジェネリック関数ポインターは、さまざまなタイプの要素をソートできるソート アルゴリズムの比較関数を実装するために使用されます。
C の汎用関数ポインターを作成および使用する方法
C では、関数ポインターは関数へのポインターです。ジェネリック関数ポインターは、さまざまなタイプおよびパラメーター数の関数を指すことができます。
汎用関数ポインターの作成
汎用関数ポインターを作成するには、テンプレートを使用できます:
template <typename Ret, typename... Args> using GenericFunctionPointer = Ret (*)(Args...);
ここ:
Ret
は関数の戻り値の型です。 Args
は、関数のパラメーター タイプのタプルです。 たとえば、整数値を受け取り文字列を返す関数へのジェネリック関数ポインターを作成します。
using FuncPtr = std::string (*)(int);
ジェネリック関数ポインターの使用
次の構文を使用して、汎用関数ポインターを使用できます。
FuncPtr funcPtr; // 声明函数指针 // 将函数赋值给函数指针 funcPtr = [](int x) { return std::to_string(x); }; // 调用通过函数指针指向的函数 std::string result = funcPtr(42);
実用的なケース
さまざまなタイプの要素をソートできるソート アルゴリズムを検討してください (例:整数または文字列として)並べ替えます。ジェネリック関数ポインターを使用して、2 つの要素を比較し、要素のサイズ関係に応じて整数を返す比較関数を実装できます。
template <typename T> int compare(const T& a, const T& b) { // 比较两个元素并返回 -1 (a < b)、0 (a == b)或 1 (a > b) // ... } template <typename T> void sort(T* array, int length, GenericFunctionPointer<int, const T&, const T&> compareFunc) { // 使用比较函数对数组进行排序 // ... }
この実装を使用すると、次のように整数の配列を並べ替えることができます:
int arr[] = {3, 1, 4, 2}; sort(arr, 4, compare<int>);
または、文字列の配列を並べ替えることができます:
std::string arr[] = {"apple", "banana", "cherry"}; sort(arr, 3, compare<std::string>);
以上がC++ ジェネリック関数ポインターを作成して使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。