今天在写一个小功能的时候,写了三个接口函数,结果代码基本类似,只是其中调用的函数不一样,而且这几个调用函数的声明是完全一样的。
根据代码的抽象三原则里的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; i<nodeSet->size(); i++) { func(node); node = node->next(); } } // 接口函数 void addPostName() { doWork(addPost); } void addPrefixName() { doWork(addPrefix); } protected: NodeObjSet* nodeSet; };