【C++基础】认识回调函数

1. 什么是回调函数:

函数指针的调用,即是一个通过函数指针调用的函数;

如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,就说这是回调函数。

In computer programming, a callback is any executable code that is passed as an argument to other code, which is expected to call back (execute) the argument at a given time. This execution may be immediate as in a synchronous callback, or it might happen at a later time as in an asynchronous callback.

即:把一段可执行的代码像参数传递那样传给其他代码,而这段代码会在某个时刻被调用执行,就叫做回调。如果代码立即被执行就称为同步回调,如果在之后晚点的某个时间再执行,则称为异步回调。

比如:我们去“新白鹿”餐馆点餐,好多人排队正在等餐,你吃完了我才能进去吃,我就在哪儿一直等着…我也不急么;后来你过来要吃饭,我先给你一个电子牌替你排好队,我先做给其他顾客吃,你去干你自己的事(逛附件商场),等好了,我叫你(并把你要的饭菜给你),这就是回调

2. 为什么要使用回调函数

回到函数作用:“解耦”,普通函数代替不了回调函数的这个特点。这是回调函数最大的特点。

#include 

// Structure to hold callback parameters
typedef struct {
    int value1;
    int value2;
} CallbackParams;

// Callback Function Type
typedef void (*CallbackFunc)(CallbackParams*);

// Library Function
void LibraryFunction(CallbackFunc callback, CallbackParams* params) {
    // Simulate some library functionality
    printf("Library: Performing some operations...\n");

    // Call the provided callback function with the parameters
    callback(params);
}

// Callback Function Implementation 1
void CallbackFunction1(CallbackParams* params) {
    printf("Callback 1: Received values from library: %d, %d\n", params->value1, params->value2);
}

// Callback Function Implementation 2
void CallbackFunction2(CallbackParams* params) {
    printf("Callback 2: Received values from library: %d, %d\n", params->value1, params->value2);
}

int main() {
    // Using the Library Function with Callback Function 1
    CallbackParams params1 = { 10, 20 };
    LibraryFunction(CallbackFunction1, &params1);

    // Using the Library Function with Callback Function 2 and different parameters
    CallbackParams params2 = { 30, 40 };
    LibraryFunction(CallbackFunction2, &params2);

    return 0;
}

在此示例中:

CallbackParams是保存回调函数所需参数的结构。
CallbackFunc是接受指向 的指针的函数指针类型。CallbackParams
LibraryFunction将回调函数和指向的指针作为参数,允许您将不同的参数传递给回调函数。CallbackParams
CallbackFunction1并且是回调函数的不同实现,每个都根据接收到的参数打印不同的信息。CallbackFunction2
在函数中,使用不同的回调函数和不同的参数集调用两次。mainLibraryFunction
这样,通过修改传递给 的参数,可以在回调函数中实现不同的功能,而无需修改库函数本身。

使用回调函数,和普通函数调用区别:

1)在主入口程序中,把回调函数像参数一样传入库函数。这样一来,只要我们改变传进库函数的参数,就可以实现不同的功能,且不需要修改库函数的实现,变的很灵活,这就是解耦。

2)主函数和回调函数是在同一层的,而库函数在另外一层。如果库函数对我们不可见,我们修改不了库函数的实现,也就是说不能通过修改库函数让库函数调用普通函数那样实现,那我们就只能通过传入不同的回调函数了,这也就是在日常工作中常见的情况

你可能感兴趣的:(C++基础,c++,开发语言)