分享帖:关于回调
今天用到回调,也看了些网上的文章,这里分享一下个人的心得体会
回调,字面意思是返回的调用,是相对于“调用”而言的。A调用B,B的执行过程中又反过来调用A,这就是回调。
以下约定,其中A称为客户端,B称为服务端,以便于描述。
回调是一种设计思想,“回调就是对函数指针的一种运用方式”这只能说是语法层面的理解,
还没有达到设计层面的高度。设计模式中,访问者模式(Visitor Pattern)中的两个要素之间就存在回调关系。
也就是说通过服务端B封装一些逻辑过程,但其中某个环节又需要暴露给客户端A,以提供自由度。
回调的范式1:
ServerFunc是主调函数,是服务端B提供给客户端A的接口,由客户端A提出规格要求。
CallbackFunc是回调函数,是客户端A提供给服务端B的回调接口,由服务端B提出规格要求。
P1是A传给B的参数,P2是B传给A的参数,P3是A发起的需要传入回调函数的参数。
这里参数P3是一个奇怪的存在,因为P3对于B没有任何意义,但是却不得不在B的接口中体现,
设计上可以称之为“对B的接口打洞”。实际应用中还确实有这种需要。那么如何解决这个问题呢?
还记得标准库中的仿函数算子(Functor)么,譬如std::less,也是一种回调的实现方式,其原理是,
实现一个类(或结构体),重载圆括号运算符,即相当于回调函数。想想使用类有什么好处呢?
对了,类是可以有成员变量滴,哦耶,这下我们可以把参数P3做为Functor类的成员变量了,如果
需要增加P3类参数,也不再影响服务端B了,very ok。
回调的范式2:
再说说泛型化,标准库是用模版来实现泛型的,其实使用多态也是可以的,别说想不到,
重载运算符也是可以声明为virtual的,所以完全是可以实现多态的算子的,这样扩展起来更方便了。

回调,字面意思是返回的调用,是相对于“调用”而言的。A调用B,B的执行过程中又反过来调用A,这就是回调。
以下约定,其中A称为客户端,B称为服务端,以便于描述。
回调是一种设计思想,“回调就是对函数指针的一种运用方式”这只能说是语法层面的理解,
还没有达到设计层面的高度。设计模式中,访问者模式(Visitor Pattern)中的两个要素之间就存在回调关系。
也就是说通过服务端B封装一些逻辑过程,但其中某个环节又需要暴露给客户端A,以提供自由度。
回调的范式1:
{
typedef int (__stdcall *CallbackFunc)(LPARAM P1, LPARAM P2, LPARAM P3);
int ServerFunc(LPARAM P1, CallbackFunc fn, LPARAM P3);
}
ServerFunc是主调函数,是服务端B提供给客户端A的接口,由客户端A提出规格要求。
CallbackFunc是回调函数,是客户端A提供给服务端B的回调接口,由服务端B提出规格要求。
P1是A传给B的参数,P2是B传给A的参数,P3是A发起的需要传入回调函数的参数。
这里参数P3是一个奇怪的存在,因为P3对于B没有任何意义,但是却不得不在B的接口中体现,
设计上可以称之为“对B的接口打洞”。实际应用中还确实有这种需要。那么如何解决这个问题呢?
还记得标准库中的仿函数算子(Functor)么,譬如std::less,也是一种回调的实现方式,其原理是,
实现一个类(或结构体),重载圆括号运算符,即相当于回调函数。想想使用类有什么好处呢?
对了,类是可以有成员变量滴,哦耶,这下我们可以把参数P3做为Functor类的成员变量了,如果
需要增加P3类参数,也不再影响服务端B了,very ok。
回调的范式2:
{
// 服务端B
struct ICallbackFunctor
{
virtual int operator()(LPARAM P1, LPARAM P2)=0;
};
int ServerFunc(LPARAM P1, ICallbackFunctor fn);
// 客户端A
struct CallbackFunctor : public ICallbackFunctor
{
virtual int operator()(LPARAM P1, LPARAM P2)
{
}
LPARAM P3;
};
}
再说说泛型化,标准库是用模版来实现泛型的,其实使用多态也是可以的,别说想不到,
重载运算符也是可以声明为virtual的,所以完全是可以实现多态的算子的,这样扩展起来更方便了。
...全文
相关推荐
微信分享及回调相应结果
微信分享及回调相应结果
微信分享 留在微信没有回调问题
解决微信分享留在微信页面的时候再返回没有成功回调。
分享帖三相桥式全控整流电路的MATLAB仿真-ThreePhase2_0.mdl
分享帖三相桥式全控整流电路的MATLAB仿真-ThreePhase2_0.mdl 新人求罩,先分享一个simulink模型,如果觉得好的话顶一下,如果觉得不好的话也请指出来:lol:lol:lol 三相桥式全控整流电路的MATLAB仿真:lol:lol
分享帖三相桥式全控整流电路的MATLAB仿真-ThreePhaseli02.mdl
分享帖三相桥式全控整流电路的MATLAB仿真-ThreePhaseli02.mdl 新人求罩,先分享一个simulink模型,如果觉得好的话顶一下,如果觉得不好的话也请指出来:lol:lol:lol 三相桥式全控整流电路的MATLAB仿真:lol:lol
vue 微信分享回调iOS和安卓回调出现错误的解决
产品需求:在微信内分享需要手动配置的分享地址、分享图片与内容描述,引导用户分享,并在微信分享成功回调内进行相应的操作。 首先需要在项目中引入微信jsSDk包,然后通过接口获取后台签名。 封装函数获取微信分享必填参数 其中的jsApiList中填的是需要使用的微信分享js接口的列表,参数URL默认是location.href,即分享当前页面的URL。 在需要分享的页面引入封装的函数 然后通过wxShare方法将URL和配置的参数传入,link参数是分享出去的链接,必须与当前页面的对应js安全域名一致; …shareData就是在函数内传对象,进行解构赋值es6写法 但是在测试过程中发


