C 関数ポインタは関数を指し、ポインタを介して関数を呼び出すことができます。関数オブジェクトは、operator() 演算子をオーバーロードするクラスまたは構造体であり、関数のように呼び出すことができます。これらは、別の関数に引数として渡される関数であるコールバック関数を操作するときに便利です。
はじめに
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 サイトの他の関連記事を参照してください。