前篇文章解决了关于函数指针的不同类成员函数传递的问题。不知道细心的朋友看见我上篇文章后,是否发现参数必须被限制为特定的参数。
原来改进的代码如下:
以FUNCPTR作为参数,能传递的函数形式只能为void xxx(void)这种类型的。
例如:#define REGISTE_FUNC(type, func) m_FuncMap.insert(std::make_pair(type, func))
REGISTE_FUNC(SCMD_REGISTER, boost::bind(&CCallFuctionList::CallDoRegister, this));
即:既FUNCPTR参数只能接受void CallDoRegister()这种类似的类成员函数!
那么有没有办法可以解决不同参数类型的函数成员呢?答案当然是有。
我们可以模仿MFC里面的回调函数做法。具体修改如下:
具体调用如下:
通过两张表,一张参数类型表,一张函数指针表,来实现参数与函数指针的对应。MFC具有借鉴意义。
当然不排除有更好的方法,如果有更好的办法,欢迎指教!