C++ では、関数ポインター、関数オブジェクト、またはラムダ式を使用してコールバック関数を実装できます。以下は、関数ポインターを使用して実装された、より読みやすいコールバック関数の例です。
#include <iostream>
#include <functional>
// 定义一个回调函数类型
using Callback = std::function<void(int)>;
// 定义一个函数,用于演示回调函数的使用
void performOperation(int data, Callback callback) {
// 执行某些操作
std::cout << "Performing operation on data: " << data << std::endl;
// 调用回调函数
callback(data);
}
// 定义一个回调函数,用于接收操作结果并输出到控制台
void handleResult(int result) {
std::cout << "Result: " << result << std::endl;
}
int main() {
// 调用performOperation函数,并传递一个回调函数作为参数
performOperation(100, handleResult);
return 0;
}
この例では、まずCallback
型を定義します。これは、整数パラメータを受け入れて null 値を返すことができる関数を表すために使用される関数ポインタ型です。次に、performOperation
整数の引数とコールバック関数の引数を受け取り、何らかのアクションを実行する関数を定義します。操作を実行した後、コールバック関数を呼び出し、操作の結果をパラメーターとして渡します。handleResult
最後に、操作結果を受け取ってコンソールに出力する関数をコールバック関数として定義します。performOperation
main 関数では、関数を呼び出し、handleResult
その関数をコールバック関数として渡します。
上記の例では、コールバック関数の種類として関数ポインターを使用していることに注意してください。このメソッドは読みやすくなっていますが、コールバック関数を手動で定義して呼び出す必要があるため、コードの複雑さと保守性が増す可能性があります。コードの読みやすさと保守性を向上させる必要がある場合は、コールバック関数の実装として Lambda 式または関数オブジェクトを使用することを検討できます。
操作結果:
写真
補充:
ラムダ式は、他の関数にパラメータとして渡したり、オブジェクトとして使用したりできる匿名関数です。ラムダ式は、関数定義とコードを簡素化するためによく使用されます。
C++ では、ラムダ式の構文は次のとおりです。
Capture -> return_type { function_body }
ここで:
- Capture: キャプチャ リスト。外部変数をラムダ式に導入する方法を指定するために使用されます。外部変数は、デフォルト値、名前空間、または修飾子にすることができます。
- パラメータ: パラメータ リスト。関数パラメータに似ていますが、タイプと名前は省略できます。
- return_type: 戻り値の型。省略可能。コンパイラが自動的に型を推測します。
- function_body: ラムダ式の演算とロジックを含む関数本体。
たとえば、ラムダ式を使用して 2 つの整数の合計を計算する例を次に示します。
#include <iostream>
#include <functional>
int main() {
int a = 10, b = 20;
auto add = [a, b](int x) -> int {
return a + b + x; };
std::cout << add(5) << std::endl; // 输出35
return 0;
}
[a, b](int x) -> int { return a + b + x; }
この例では、整数パラメータ x を受け入れ、3 つの整数の合計を返すLambda 式を定義します。このラムダ式を add という変数に代入し、整数パラメータ 5 を渡して main 関数内で呼び出します。最終的な出力結果は 35 です。
ラムダ式の構文は比較的単純ですが、実際に使用する場合はラムダ式のライフサイクルやスコープ、外部変数の参照やアクセス権限などの問題を正しく処理する方法に注意する必要があります。