Qt之回调函数:5 回调函数的注册

注册回调函数实现方法

版权声明:本文主要内容均来自 世外桃源 的原创文章,遵循 CC 4.0 BY-SA 版权协议。
原文出处链接:https://blog.youkuaiyun.com/qq_14820081/article/details/89231995

回调函数的注册

在c++中,注册函数的参数是回调函数指针。

解释

以层次模型来解释:

​ 注册函数所在的类,是调用回调函数的决定者【下层】,决定何时何种条件下去调用回调函数。而真正实现回调函数功能的类【上层】,不会直接调用该回调函数。

​ 一般来说,会把【上层的】回调函数通过【下层的】注册函数,保存在注册函数所在类的成员变量【下层】中,在适当的时候,【下层】通过该成员变量去访问注册过的回调函数。在c++中,该成员变量是同种类型的函数指针。

​ 加入了一些定语,是不是就层次分明了?!!🤣

代码实现

说明:大佬的代码也挺完美的,我只是按照自己的理解和思路,拆分了一下。

模拟下层的函数库

lib.h

#pragma once
#include <stdio.h>
#include <functional>
typedef std::function <void () > CallBack;		// 定义函数类型
void hook() ;                                           // 执行回调函数
void register_hook_callback(CallBack p_callback);        // 只是提供一个注册函数

lib.cpp

#include "lib.h"

CallBack p[5] = { NULL }; // 创建一个函数指针数组

void hook() // 官方封装起来
{
    int i = 0;
    for (i = 0; i < 5; i++) {
        if (p[i] != NULL) {
            p[i]();
        }
    }
}

void register_hook_callback(CallBack p_callback) // 只是提供一个注册函数
{
    int i = 0;
    for (i = 0; i < 5; i++) {
        if (p[i] == NULL) {
            p[i] = p_callback;
            break;
        }
    }
}

模拟上层的函数 main.cpp

#include <functional>
#include <windows.h>
#include "lib.h"
using namespace std;

void test01();
void test02();

int main()
{
    register_hook_callback(test01);
    register_hook_callback(test02);
    while(1)
    {
        hook();
        printf("=====运行========\n");
        Sleep(1000);
    }
}

// 上层用户自己要定义回调函数
void test01()  
{
    printf("\ntest01 callback\n");
}
void test02()
{
    printf("\ntest02 callback\n");
}

总结

​ 还是以层次模型为解,注册只是让下层拥有上层定义的函数指针,不一定局限于使用函数,也可以直接赋值。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值