回调函数:定义、用途及 C++ 示例
回调函数是指在某个事件发生或者异步操作完成时,由系统或程序自动调用的一个函数。回调函数通常作为参数传递给另一个函数,在操作完成后被调用。回调函数的作用是在异步操作完成后处理返回结果,或者在事件发生后执行相应的操作。回调函数常见于 JavaScript、Node.js 等语言和框架中。
C++ 回调函数示例
简单示例
#include <iostream>
#include <functional>
void foo(int x, int y, std::function<void(int)> callback) {
int sum = x + y;
callback(sum);
}
void bar(int result) {
std::cout << 'foo() returned ' << result << std::endl;
}
int main() {
foo(1, 2, bar);
return 0;
}
在这个例子中,foo() 函数接受两个整数参数和一个回调函数参数 callback。在 foo() 函数内部,它计算了 x 和 y 的和,并将该结果传递给回调函数 callback。在调用 foo() 时,我们将一个名为 bar 的函数作为回调函数传递给它。这意味着当 foo() 计算出 x 和 y 的和时,它将调用 bar() 函数并将计算结果作为参数传递给它。在这种情况下,bar() 函数打印了计算结果。
此示例使用了 C++11 中的 std::function 和 lambda 表达式来定义回调函数,但您也可以使用任何可调用对象,例如全局函数、类成员函数或函数对象,作为回调函数来传递给 foo() 函数。
稍微复杂的示例
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
void printVector(const std::vector<int>& vec) {
std::cout << "Vector elements: ";
for (const auto& elem : vec) {
std::cout << elem << " ";
}
std::cout << std::endl;
}
void sortVector(std::vector<int>& vec, std::function<bool(int, int)> compareFunc) {
std::sort(vec.begin(), vec.end(), compareFunc);
}
int main() {
std::vector<int> vec = {4, 2, 1, 5, 3};
std::cout << "Before sorting: ";
printVector(vec);
std::function<bool(int, int)> compareFunc = [](int a, int b) {
return a < b;
};
sortVector(vec, compareFunc);
std::cout << "After sorting: ";
printVector(vec);
return 0;
}
在这个例子中,我们定义了两个函数 printVector() 和 sortVector(),并且在 main() 函数中使用了回调函数来实现对 sortVector() 函数的排序方式进行自定义。sortVector() 函数接受一个整数向量和一个回调函数参数 compareFunc,该函数用于指定向量元素的排序方式。在 main() 函数中,我们定义了一个 lambda 表达式作为回调函数,该表达式将向量元素按升序排序。最后,我们调用 sortVector() 函数并打印排序后的向量元素。
这个例子展示了回调函数的强大之处,它可以让我们在不改变函数本身的情况下,通过传递不同的回调函数来实现不同的功能。
回调函数的优势
- 代码重用: 回调函数允许您在不修改函数本身的情况下,通过传递不同的回调函数来实现不同的功能。
- 异步编程: 回调函数是异步编程的重要组成部分,它们允许您在操作完成时执行特定的操作,而无需阻塞主线程。
- 灵活性和可扩展性: 回调函数允许您轻松地添加或更改函数的行为,而无需修改函数本身。
原文地址: https://www.cveoy.top/t/topic/jI6v 著作权归作者所有。请勿转载和采集!