这个代码生成器真的就那么好吗?带来的问题是,每次需要新的多播委托就要重新生成一个,这样无疑是比较麻烦的,不仅如此,而且还不能调用成员函数,这是非常失望的,所以代码的构架有必要再次去修改一下。想象一下,当一个成员函数需要作为回调函数时,怎么办?也许有人说改为static的,OK,那我想使用函数成员怎么办?声明一个全局this指针,好的,那如果这个类有多个实例呢?。。。没有办法了吗,有。举个例子:
template<class T>
class Delegate
{
private:
typedef void (T::*fnPtr)();
T* pThis;
fnPtr fuction;
public:
Delegate(T* t,fnPtr f):pThis(t),fuction(f){}
void Invoke()
{
(pThis->*fuction)();
}
};
这样的话,在你创建的时候,必须指明要代理的类型才能够使用,虽然我们还不能够用它来做多播委托,->*这个符号也有点怪异,但是它能够使成员函数作为回调函数,我们看到了一线曙光,思考一下,如何使他变成多播委托呢?