ホームページ >バックエンド開発 >C++ >C++ 関数ポインターの適用シナリオ

C++ 関数ポインターの適用シナリオ

WBOY
WBOYオリジナル
2024-04-18 09:33:011156ブラウズ

C の関数ポインタは、関数のメモリ アドレスを指す変数を指します。これは、コールバック関数、動的バインディング、イベント処理などのシナリオでよく使用されます。たとえば、並べ替えアルゴリズムでは、関数ポインターを使用してさまざまな比較関数を実装し、並べ替えアルゴリズムを柔軟に選択できます。

C++ 函数指针的应用场景

C 関数ポインターの応用シナリオ

関数ポインターとは何ですか?

C では、関数ポインターは関数へのポインターです。これは関数のメモリアドレスを指す変数です。

関数ポインタの宣言

関数ポインタの宣言は、通常の関数の宣言とよく似ていますが、先頭にアスタリスク (*) が追加される点が異なります。関数名:

typedef int (*FuncPtr)(int, int);

上記の宣言は、FuncPtr という名前の関数ポインターを定義します。この関数は、int 型の 2 つのパラメーターを受け取り、 を返す関数を指します。 int 型 関数。

関数ポインターの使用法

関数ポインターは次のシナリオで使用できます:

  • コールバック関数:引数として渡された関数を、後で呼び出される他の関数に変換します。
  • 動的バインディング: 実行時に関数ポインターを実際の関数に関連付けることにより、ポリモーフィズムを実現します。
  • イベント処理: 特定のイベント (ボタンのクリックなど) のハンドラー関数を定義し、関数ポインターに格納します。

実際のケース: 並べ替えアルゴリズム

関数ポインターを使用して、さまざまな並べ替えアルゴリズムを実装できます。以下は、関数ポインターを使用した比較関数を使用する sort 関数です。

#include <algorithm>

bool Ascending(int a, int b) {
  return a < b;
}

bool Descending(int a, int b) {
  return a > b;
}

void Sort(int* arr, int size, bool (*CompareFunc)(int, int)) {
  std::sort(arr, arr + size, CompareFunc);
}

int main() {
  int arr[] = {5, 3, 1, 2, 4};
  int size = sizeof(arr) / sizeof(arr[0]);

  // 使用升序比较函数进行排序
  Sort(arr, size, Ascending);

  // 使用降序比较函数进行排序
  Sort(arr, size, Descending);

  return 0;
}

上記のコードでは、CompareFunc は 2 つの # を受け入れる関数への関数ポインターです。 ##int 型パラメータを使用し、bool 型比較関数を返します。 2 つの比較関数 AscendingDescending を定義し、2 つの数値を昇順と降順で比較します。

Sort 関数は、渡された比較関数を使用して配列 arr を並べ替えます。関数ポインターを使用すると、さまざまな比較関数を柔軟に選択して、さまざまな並べ替えアルゴリズムを実装できます。

以上がC++ 関数ポインターの適用シナリオの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。