在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
函数。