一、回调的意义
在 C/C++ 中,回调(callback)是一种广泛使用的编程模式,它的核心思想是将函数作为参数传递给其他函数,然后由这个接收函数在适当的时机调用它。这种方式能有效地解耦代码、提高灵活性和可扩展性,特别是在处理事件驱动编程、异步操作、框架设计等场景中。
1. 解耦代码
回调函数使得不同的模块或组件之间能够通过接口进行通信,而不需要彼此知道对方的具体实现细节。这种解耦的特性非常重要,尤其在复杂系统中,它使得不同的模块可以独立开发和修改,而不影响系统的整体功能。
例子: 假设你在开发一个图形界面应用程序,用户点击按钮时需要执行某个操作。通过回调机制,点击事件可以由不同的操作来响应,而不需要按钮控件本身知道具体的操作内容。
#include <iostream>
#include <functional>
using Callback = std::function<void()>;
void buttonClick(Callback callback) {
std::cout << "Button clicked.\n";
callback(); // 执行回调
}
void action1() {
std::cout << "Action 1 executed.\n";
}
void action2() {
std::cout << "Action 2 executed.\n";
}
int main() {
buttonClick(action1); // 点击按钮,执行 action1
buttonClick(action2); // 点击按钮,执行 action2
return 0;
}
2. 提高灵活性
回调使得我们可以在运行时决定应该执行哪个函数或操作,而不需要在编译时就固定下来。这种灵活性在一些框架或库中尤为重要,因为它允许开发者在使用时根据实际需求传递不同的回调函数,定制不同的行为。
例子: 假设你在开发一个排序算法框架,你希望让用户定义自己的比较规则,而不是使用默认的规则。通过回调,你可以让用户传入自己的比较函数,而不需要修改排序算法的实现。
#include
CompareCallback = std::function<(, )>;
{
std::(data.(), data.(), compare);
}
{
std::vector<> data = {, , , , };
(data, []( a, b) { a < b; });
( num : data) {
std::cout << num << ;
}
std::cout << std::endl;
(data, []( a, b) { a > b; });
( num : data) {
std::cout << num << ;
}
;
}


