持续创作,加速成长!这是我参与「掘金日新计划 · 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++开发程序猿~