C语言实现责任链二通过配置文件改变处理逻辑

C语言实现责任链二 通过配置文件改变处理逻辑
这篇文章承接上一篇文章。
通过配置文件来指定来指定处理逻辑。。这个貌似很神奇。
为了简化,处理配置文件的部分我不罗嗦,我假定函数名已经读出来了。放在一个数组里面。
比如:
char *FunName = { "FunA",
"FunB",
"FunC",}
但是这些函数名有什么用呢。

其实我们的关键是通过函数名来获取函数地址。这听起来有点像Java里面的反射,Java不就是通过类名字符串来动态的加载一个类,创建对象吗。


C语言也可以。
但是我们要做更多的处理。
首先,假如有这么几个处理函数:
void FunA(void *pData,struct HandleChain *pChain)
{
//......处理逻辑A
doChain(pData,pChain);
//...处理逻辑A
}
void FunB(void *pData,struct HandleChain *pChain)
{
//......处理逻辑B
doChain(pData,pChain);
//...处理逻辑B
}
void FunC(void *pData,struct HandleChain *pChain)
{
//......处理逻辑C
doChain(pData,pChain);
//...处理逻辑C
}
跟上次文章一样。。。
我们建立一个结构体。
struct FunNameToAddress
{
char FunName[20];
unsigned long FunAddress;
}
然后建立一个结构体数组:
struct FunNameToAddress funs[3] = {
{"FunA",(unsigned long)FunA},
{"FunB",(unsigned long)FunB},
{"FunC",(unsigned long)FunC}};
然后我们根据FunName这个指针数组,通过一个循环,就可以查找函数名对应的函数地址。
用这些个地址来初始化 struct HandleChain MyChain ;
最后调用doChain。

这个处理流程跟上篇文章差不多,只不过,我们程序维护了一个函数名到函数地址的一个映射。

这样我们可以把所有处理逻辑的函数都写好了。程序编译完成后,程序执行的时候,就有了一个映射表。程序通过读取文件,把你设定的哪些处理函数读取出来。然后程序根据这些来执行程序。


这样做不太好的地方:只能设定那些程序中已经有的处理函数。

好处:自己定义处理函数的执行顺序,自己设定用哪些处理函数。


其实这个不太好的地方可以改善,把处理函数的编写放在dll里面。这样你要新定义处理函数,重新编译dll文件就行了。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值