C++;具有绑定的委托 我必须用C++编写一个委托(不允许C++ 11个特性),基本上有两种方法:代码> BDIN(): > 调用()>代码>。应该可以绑定自由函数、任何类的成员函数和任何类的常量成员函数Bind()存储函数指针,并调用上次绑定的函数指针
我收到了示例代码,该代码应按照以下方式编译:C++;具有绑定的委托 我必须用C++编写一个委托(不允许C++ 11个特性),基本上有两种方法:代码> BDIN(): > 调用()>代码>。应该可以绑定自由函数、任何类的成员函数和任何类的常量成员函数Bind()存储函数指针,并调用上次绑定的函数指针,c++,binding,delegates,member-function-pointers,C++,Binding,Delegates,Member Function Pointers,我收到了示例代码,该代码应按照以下方式编译: 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.Inv
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
}
当对委托调用Bind()
时,我首先收到memberFunctionPointer
的类型
那么,有办法做到这一点吗?我已经看过这篇文章了,但是我自己没能想出一个解决方案。
Delegate
是一个类模板,所以需要提供它的模板参数。本例中的模板参数应该是类名。既然你希望这是可选的,你应该使用std::function
而不是自己写。我不想为了自己写而写自己的委托书,但这是我在大学时分配给我的作业。感谢您提供std::function。我也许可以用它的实现来解决我的问题,关键技术是类型擦除。这就是std::function
的全部内容。查一查。此外,还必须为C++03实现参数转发。
Delegate d;