源自:C语言 — 函数的注册和回调_c语言 函数注册-CSDN博客

回调函数的使用方法:

定义一个回调函数;

调用者在使用时,保存回调函数的函数指针,称为“注册”;

调用者发现条件满足时,使用函数指针调用回调函数对事件进行处理。

回调可用于通知机制。比如要写一个多线程下载器,显示下载进度时可以将进度值函数设置为函数,线程内部即可处理,非常方便                        
原文链接:https://blog.csdn.net/moneymyone/article/details/130634488

C++ 【回调函数】详解与代码解读_c++回调函数-CSDN博客 

 

结合自己项目的使用:登记注册于调用

1.单例:

 

2.注册函数定义:

3.调用注册函数: 

 4.调用回调函数:

其中:std::function  std::bind 是C++11的内容,参考下文博客:

通过 std::function std::bind 添加回调-CSDN博客

摘抄:声明 定义 绑定 ,接着可以像上文的步骤,进行注册以及调用。

补充:为什么要使用回调函数?信号槽其实也是一种回调函数思想

【2期 QT信号与槽函数&回调函数与函数指针】_qt 函数指针-CSDN博客

摘抄:

追加:

2024.07.30

回调函数(callback)是什么?一文理解回调函数(callback)

 

//回调函数
void callbackFunc(void* result){
    printf("processing result: %s\n",(char*)result);
}

void processData(void*data, int len,  void(*callback)(void* result)){
    void* result = data;
    callback(result);
}

int main()
{
    //回调函数
    char data[] = "hello world";
    processData(data, sizeof(data),callbackFunc);
    return 0;
}

其中,data 表示要处理的数据,len 表示数据的长度,callback 是一个函数指针,用于指定处理完数据后的回调函数。回调函数的形式如下:

补充:

#include <iostream>
using namespace std;

// 定义回调接口
class CCallback {
public:
    virtual void onReminder(int reminderType) = 0;
};

// 智能闹钟类
class SmartAlarm {
public:
    SmartAlarm(CCallback* callback) : m_callback(callback) {}

    // 触发提醒
    void triggerReminder(int type) {
        if (m_callback) {
            m_callback->onReminder(type); // 通知监听者
        }
    }

private:
    CCallback* m_callback;
};

// 应用程序类,实现了回调接口
class MyApp : public CCallback {
public:
    MyApp() {
        // 创建智能闹钟实例并注册自己为监听者
        m_alarm = new SmartAlarm(this);
    }

    // 实现回调方法
    void onReminder(int type) override {
        if (type == 1) {
            cout << "Good morning! Playing music..." << endl;
        } else if (type == 2) {
            cout << "Time for a break! Showing notification..." << endl;
        }
    }

    // 测试触发提醒
    void testReminders() {
        m_alarm->triggerReminder(1); // 触发早上提醒
        m_alarm->triggerReminder(2); // 触发午休提醒
    }

private:
    SmartAlarm* m_alarm;
};

int main() {
    MyApp app;
    app.testReminders(); // 测试提醒功能
    return 0;
}

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐