C++ 回调函数(Qt系列)

32 篇文章 13 订阅

什么是回调函数?

就是以函数指针做参数传递给另一个函数称之为回调函数, 字面意思很简单, 但就这几个字想理解回调函数, 那又很难。因此别就这这字面意思, 只要知道怎么用, 在什么情况下用就行了

什么场景下需要使用回调函数

回调函数主要是完成通知功能, 例如我领导给我分配另外工作, 但是我手里工作又没做完, 那领导总不可能没过个几个小时就跑过来问一下,这样我们两个人都很烦, 而在代码中如果这样实现(需要开一个线程, 不停的轮寻)也很消耗系统资源, 所以最好的办法就是等我手里的工作完成了, 我自己去和领导说,然后进入下个工作任务, 而在我们代码中想要这样实现就需要通过回调函数来完成


回调函数3要素:

  • 定义一个函数指针(和回调函数的参数类型,数量,顺序,返回值全部一致)。
  • 定义一个类成员静态回调函数(备注:类成员回调函数必须是static)。
  • 回调函数和函数指针绑定在一起。

回调函数用法1: C98回调函数写法

//该类相当于上面例子中员工(我)的角色

using namespace std;//定义一个函数指针
typedef void(*PrintName)(string strName);

enum CallType
{
	NAME,
	AGE,
	GRADE,
};

class CallBack
{
public:
	CallBack();
	~CallBack();
public:
	void TestCallBack(CallType type);
public:
	PrintName m_PrintName;
};
#include <memory>
#include "CallBack.h"
class BaseCall
{
public:
    BaseCall();
    ~BaseCall();
 
public:
        //静态的类成员函数
    static void onPrintName(string strName);
private:
    std::shared_ptr<CallBack> m_CallBack;
};
 
BaseCall::BaseCall()
{
    m_CallBack = make_shared<CallBack>();
        //和回调函数绑定
    m_CallBack->m_PrintName = onPrintName;
    m_CallBack->TestCallBack(NAME);
}
 
BaseCall::~BaseCall()
{
 
}
 
void BaseCall::onPrintName(string strName)
{
    printf("姓名: %s\n", strName.c_str());
}

Qt 中的回调函数

而在Qt中传数据,我们是使用信号槽系统,但这并不意味着不能使用旧的经过验证的方法,即使用 CallBack回调函数功能。
事实上使用 CallBack 功能比信号和槽要快一些。并且当发送信号的对象在程序中被销毁并且不再使用时,就信号理想地从槽中分离而言,回调可以更容易使用。

假设A类包含B类的对象,B类有动作时想要通知到A类,B类应该有个设置回调函数的接口,A类应该定义相应的回调函数,将函数指针传递给B。

  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值