在用CPPUNIT做单元测试的过程中,测试用例的书写过于的繁琐,想简化一下。其中需要建立字符串<-->函数的对应关系。
因此学习了一下,大致可以分成以下几步:
1.利用容器中的MAP,将字符串和函数指针建立起联系,具体的实现为:
//建立一个string和函数指针的映射
map<string, void (*)(void)> funcs;
//建立一个键为func1,值为func1地址的映射
funcs["func1"] = func1;(该语句实现过程如下:1.查找是否有键为func1的函数 2.没有的话在容器中创建一个键为"func1"的映射对,此时指针的值默认为NULL 3.将函数func1的值写入映射)。
//根据字符串调用func1
string funcName = "func1";
funcs[funcName]();
2.类成员函数的指针的使用方法,大致可以分为三类:(静态、非静态、虚函数)他们的调用方法存在差别,但是为什么有这种差别,还没有想清楚。
静态函数staticFunc()的使用方法,基本等同于全局函数;
非静态函数Func()和虚函数vFunc()的使用方法基本相同:
void (test::*p)(void);
p = &test::Func();
test t;
(t.*p)();
综上所述,建立类成员函数与字符串对应关系的代码如下:
map <string, void(test::*)()> funcs;
test t;
funcs["test::print"] = &test::print;
调用方法为:
(c.*(funcs["test::print"]))();
浙公网安备 33010602011771号