我必须用C ++编写一个委托(不允许使用C ++ 11特性),它基本上有两种方法Bind()
和Invoke()
。应该可以绑定任何类的自由函数,任何类的成员函数和任何类的const成员函数。 Bind()
存储函数指针,Invoke()
调用最后绑定的函数指针。
我得到了示例代码,它应该按照给定的方式编译:
void Function(float, double);
Delegate d;
d.Bind(&Function);
d.Invoke(1.0, 10);
到目前为止,这不是问题。
class Temp
{
public:
void DoSomething(float, double);
};
Delegate d;
Temp t;
d.Bind(&Temp::DoSomething, &t);
d.Invoke(2.0, 20);
现在这是我的问题。我想用模板解决这个问题,我很确定这是要走的路。那么我会定义这样的东西:
template<class T>
class Delegate
{
public:
//here are all the overloads, that is not the difficulty
private:
void (*FunctionPointer)(int, float);
void (T::*memberFunctionPointer)(int, float); //this is my problem
}
但是如果我以这种方式定义我的类,我就不能通过编写
来实例化一个委托Delegate d;
在代理人调用memberFunctionPointer
时,我首先收到Bind()
的类型。
那么,有没有办法做到这一点?
我已经查看了这篇文章https://stackoverflow.com/a/9568485/3827069,但我自己无法提出解决方案。