C ++委托绑定

时间:2015-01-10 01:38:43

标签: c++ binding delegates member-function-pointers

我必须用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,但我自己无法提出解决方案。

0 个答案:

没有答案