前面有提到过关于函数指针调用C++非静态成员,解决了在类内调用函数指针的问题。
由于定义了类型type void (CCallFuctionList::*FUNCPTR)(); 知道接收函数指针的参数是 FUNCPTR。
但要是要接收时其他类的成员函数,该解决呢?
这里就需要引入boost::bind和boost::function两个函数。
简单介绍
boost::bind作用在于创建函数对象。其参数分别为接收函数名,函数需要传入的参数值。
boost::function作用在于保存函数对象,然后调用函数和函数对象。
我们来对上面的例子进行修改:
---type void (CCallFuctionList::*FUNCPTR)();
->typedef boost::function<void()> FUNCPTR;
修改代码如下:
调用代码如下:
注意这里REGISTE_FUNC(type, func)中的func,可以接收其他类的函数成员。例如:
在XXClass里面某成员函数里面调用
REGISTE_FUNC(SCMD_REGISTER, boost::bind( &XXClass::XXFunc, this));