C++ 関数ポインタと関数オブジェクト: コードの隠れた可能性を解き放つ

王林
リリース: 2024-04-29 10:33:01
オリジナル
728 人が閲覧しました

C 関数ポインタは関数を指し、ポインタを介して関数を呼び出すことができます。関数オブジェクトは、operator() 演算子をオーバーロードするクラスまたは構造体であり、関数のように呼び出すことができます。これらは、別の関数に引数として渡される関数であるコールバック関数を操作するときに便利です。

C++ 函数指针与函数对象:解锁代码的隐藏潜力

C 関数ポインターと関数オブジェクト: コードの隠れた可能性を解き放つ

はじめに

C の場合, 関数ポインターと関数オブジェクトは、コード内で関数を表現および操作するための強力なツールです。これらの概念を理解することは、コードの柔軟性と保守性を大幅に向上させることができるため、非常に重要です。

関数ポインタ

関数ポインタは関数へのポインタです。関数のアドレスが保存され、ポインターを介して関数を呼び出すことができます。構文は次のとおりです:

return_type (*function_pointer)(parameter1, parameter2, ...);
ログイン後にコピー

例:

次の関数は 2 つの数値の合計を計算します:

int add(int a, int b) {
  return a + b;
}
ログイン後にコピー

次の関数を使用できます。この関数を指すポインタ :

int (*add_ptr)(int, int) = add;
ログイン後にコピー

これで、関数ポインタを介して add 関数を呼び出すことができます:

int result = add_ptr(10, 20); // 等价于 add(10, 20)
ログイン後にコピー

Function object

関数オブジェクトは、関数のように呼び出せるように operator() 演算子をオーバーロードする A 型または構造体です。構文は次のとおりです:

struct FunctionObject {
  return_type operator()(parameter1, parameter2, ...);
};
ログイン後にコピー

例:

2 つの数値の合計を計算する関数オブジェクトを作成します:

struct AddFunctionObject {
  int operator()(int a, int b) {
    return a + b;
  }
};
ログイン後にコピー

次に、このオブジェクトをインスタンス化し、関数のように呼び出すことができます:

AddFunctionObject add_object;
int result = add_object(10, 20); // 等价于 add(10, 20)
ログイン後にコピー

実用的なケース: コールバック関数

コールバック関数を使用する場合、関数ポインターと関数オブジェクトは非常に便利です。コールバック関数は、パラメータとして別の関数に渡される関数です。

例:

一連の数値を別の関数に渡す関数があるとします。後者は各数値に対して演算を実行します。関数ポインターまたは関数オブジェクトを使用して、2 番目の関数をコールバック関数として渡すことができます。

関数ポインタを使用:

void process_numbers(int* numbers, int size, int (*operation)(int)) {
  for (int i = 0; i < size; i++) {
    numbers[i] = operation(numbers[i]);
  }
}
ログイン後にコピー

関数オブジェクトを使用:

void process_numbers(int* numbers, int size, FunctionObject& operation) {
  for (int i = 0; i < size; i++) {
    numbers[i] = operation(numbers[i]);
  }
}
ログイン後にコピー

以上がC++ 関数ポインタと関数オブジェクト: コードの隠れた可能性を解き放つの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!