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);
(从这里两个函数的调用方式其实隐约可以看出类的实现方法应该和结构体有关。)