Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;具有绑定的委托 我必须用C++编写一个委托(不允许C++ 11个特性),基本上有两种方法:代码> BDIN(): > 调用()>代码>。应该可以绑定自由函数、任何类的成员函数和任何类的常量成员函数Bind()存储函数指针,并调用上次绑定的函数指针_C++_Binding_Delegates_Member Function Pointers - Fatal编程技术网

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;