C++|指针函数与回调使用对比

172 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第23天,点击查看活动详情

在编写C代码时,很多情况下会用到多个类之间的调用,指针函数调用于回调函数的使用这两种方式使用的次数也比较多。

这几年都在使用Qt做开发,页面之间的消息传递几乎都是用消息机制发送的,很少用到这两种情况。最近用的频繁是因为有些功能需要模块化处理,既能放到Qt环境下使用,又可以在MFC框架下应用。因此,又将函数指针调用的方式拿出来使用了。

不依赖于任何开发环境,指针函数与回调函数该如何应用呢?

指针函数应用

所谓的指针函数,就是将B类中的一个函数传给A类,经过某些处理后调用B类中的这个函数。

在A类中需要定义这样一个函数参数,与B类传入的函数参数一致的指针。

void (*m_fun)(int, bool);

A类、B类传递的函数参数假设如上所示。

在B类中定义函数,接收A类处理结果。

void ReceivedAClassResult(int n, bool bResult)
{
    //接收的数据处理
}

在A类中需要用一个函数接收B类传入的函数指针。

void A::SetFuncPtr(void(*fun)(int))
{
    m_fun = fun;
}

使用很简单,只要保证传入的参数与接收的参数一致就可以。

回调函数应用

与函数指针不同的是,A类中需要定义这样供B类调用的回调函数,B类同样将被触发的函数传给A类,作为注册回调。

1:需要在A类中注册一个回调函数

typedef void(*CallBackAParamter)(int, bool);

2:在类中注册回调函数

CallBackAParamter m_callBack;

void SetFuncPtr(CallBackAParamter callBackFunc)
{
    m_callBack = callBackFunc;
}

3:在A类调用位置,直接调用

m_callBack(/*参数1*/, /*参数2*/);

4:在B类中直接使用该函数

这两种方法各有千秋,一般我使用指针函数的方法比较多。不知道大家都喜欢用什么方式。

我是中国好公民st,一名C++开发程序猿~