C++模板实现模块间参数传递及回调之二

本文介绍了一种使用C++模板实现模块间的参数传递和回调的方法,允许将静态函数和类成员函数作为回调。通过创建CallbackFunc基类和StaticCallbackFunc、MemberCallbackFunc派生类,实现了对不同参数数量的函数调用。虽然存在动态类型转换和参数复制的开销,但可以提高代码的灵活性和可复用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1 回调函数

1.1 适用范围

假设你要设计一个模块,这个模块通过回调的方式与外部其他模块交互,注册回调的接口可能会像下面这样:

Class xyz

{

Void RegisterCallback(void(*)(int));

};

如果这样就能让你满足的话,请你关了这篇文档,喝杯咖啡或者看看电影消遣一下,以免消耗过多的脑细胞。

如果能把类的成员函数作为回调的话会得到很多便利,至少你可以少些很多的代码来实现静态函数和你的外部类之间的交互。这样会带来一个问题,对于每一个需要被通知的类都要有一个注册的接口:

Void RegisterCallback(classX *pc,void(classX::*)(int));

这样做再次违反了设计的美学。是否有方法提供一个统一的接口,而不管回调函数是静态函数或任意类的成员函数呢?答案是肯定的。

1.2 使用方法

模块1中代码:

Void test1(int)

Struct xyz

{

Int Menberfunc(int);

};

Xyz *p = new xyz;

CCallbackFunc *p1 = CreateCallback(test1);

CCallbackFunc *p2 = CreateCallback(p,&Xyz ::Menberfunc);

现在只要你的模块保存p1p2就可以用如下的方式调用回调:

ExcuteCallback(P133);

ExcuteCallback(P2,55);

甚至还可以这么写:

CCallbackFunc *p1 = CreateCallback(test199);

以后的某个时间:

ExcuteCallbackp1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值