C++类的成员函数地址(实习笔记)

C++类的成员函数地址(实习笔记)

这次的任务是重构代码,以前的代码由于时间的关系结构很粗糙,全是if结构,冗余的地方太多,而且对于后期的维护也是一个很大的问题。所以需要一个好一点的设计。

我的方法是采用函数指针数组的方式来解决if冗余的问题。正确使用函数指针数组的前提条件是这些函数的结构是类似的,也就是有相同类型的输入输出。这也恰好符合这次的问题。所以只需要把所有要调用的函数指针存入这个函数指针数组,然后用一个循环迭代调用就可以了,以后有新功能需要添加的时候也就只需要把对应的函数的指针增加到数组中就可以解决问题。十分方便。

但是这里有个问题,C++里面的类成员函数的取地址方法和C直接取地址是有一些不同的。例如:

Class at_file_service
{
    /*..其他代码..*/
    int para_xml_func1(char *);
    int para_xml_func2(char *);
    ...
}

首先,定义一个类成员函数指针的方式也和C不同:
int (at_file_service::ptrfunc)(char );
这样才能定义一个类成员函数指针变量。
其次,如何取得para_xml_func1的地址呢:
ptrfunc = &at_file_service::para_xml_func1;
最后,又怎么调用这个函数呢:
这个时候如果类没有使用单例模式的话就可以直接使用指针调用:
at_file_service.*ptrfunc(str);
如果像上一篇毕竟那样使用了单例模式的话:
at_file_service::get_at_file_service()->*ptrfunc(str);

(从这里两个函数的调用方式其实隐约可以看出类的实现方法应该和结构体有关。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值