在用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"]))();

 

 

 

 

posted on 2012-11-27 20:37  飞天2012  阅读(202)  评论(0)    收藏  举报