今天在写一个小功能的时候,写了三个接口函数,结果代码基本类似,只是其中调用的函数不一样,而且这几个调用函数的声明是完全一样的。
根据里的rules of three,应该得抽象一下了。。。
最直接的想法就是抽出一个共用函数,三个接口函数调用这个共用函数,通过传入不同的函数指针,来实现不同的功能。结果写着写着忘了函数指针怎么写了。。。人老了就是不行了,google吧。
网上关于函数指针的博文很多,其中我只需要如何定义和使用就OK了,所以下面就胡乱写个示例记在这里:
// 功能函数 void addPost(NodeObj* node) { node->name += "_post"; } void addPrefix(NodeObj* node) { node->name = "pre_" + node->name; } class NodeSet{ public: void doWork( void (*func)(NodeObj*) ) { NodeObj* node = nodeSet->head(); for (int i=0; isize(); i++) { func(node); node = node->next(); } } // 接口函数 void addPostName() { doWork(addPost); } void addPrefixName() { doWork(addPrefix); } protected: NodeObjSet* nodeSet;};