在C++中,可以使用函數對象(也稱為仿函數或functor)來實現回調。函數對象是一個類或結構體,它重載了()運算符,使其可以像函數一樣被調用。這樣,你可以將函數對象作為參數傳遞給其他函數,實現回調功能。
以下是一個簡單的示例,展示了如何使用函數對象實現回調:
#include <iostream>
#include <functional>
// 定義一個函數對象,用于計算兩個數的和
struct Sum {
int operator()(int a, int b) const {
return a + b;
}
};
// 定義一個接受回調函數作為參數的函數
template <typename Callback>
int applyCallback(int a, int b, Callback callback) {
return callback(a, b);
}
int main() {
Sum sum;
int result = applyCallback(3, 4, sum); // 使用函數對象sum作為回調函數
std::cout << "The sum is: " << result << std::endl; // 輸出 "The sum is: 7"
// 使用lambda表達式作為回調函數
auto lambdaSum = [](int a, int b) { return a + b; };
result = applyCallback(3, 4, lambdaSum); // 使用lambda表達式作為回調函數
std::cout << "The sum is: " << result << std::endl; // 輸出 "The sum is: 7"
return 0;
}
在這個示例中,我們定義了一個名為Sum
的函數對象,它重載了()運算符以計算兩個數的和。我們還定義了一個名為applyCallback
的模板函數,它接受一個回調函數作為參數。在main
函數中,我們使用Sum
對象和lambda表達式作為回調函數調用applyCallback
函數。