我正在开发一个包含一些按钮的OpenGL菜单。我希望能够将一个动作(任何类的成员函数(具有固定签名)!)与按下按钮时执行的回调相关联。目前,我只能为一种类型的回调函数进行关联。我希望能够使用任何类的任何成员函数作为我的回调函数。
目前,我是这样做的:
回调函数的签名如下:
当我按下按钮时,可以执行我传递的回调函数。我尝试过boost::bind,但是我无法找到解决问题的方法。此外,我的所有类都派生自一个Object类,所以我考虑使用void*,然后通过一些typeid hack将其转换为正确的类,但我无法使其工作。最终,我总是无法完全消除回调函数的类类型(这对于在我的按钮类中保存函数指针是必要的),同时仍能调用该函数。您有任何想法如何解决这个问题吗?
目前,我是这样做的:
#define BUTTONCALLBACK(Func) bind1st( mem_fun( &ClassICanSupport::Func ), this )
然后我可以创建一个这样的按钮:
Button* b = new Button("Bla", BUTTONCALLBACK(functionIWanttoCall));
回调函数的签名如下:
void callback(Button* source);
当我按下按钮时,可以执行我传递的回调函数。我尝试过boost::bind,但是我无法找到解决问题的方法。此外,我的所有类都派生自一个Object类,所以我考虑使用void*,然后通过一些typeid hack将其转换为正确的类,但我无法使其工作。最终,我总是无法完全消除回调函数的类类型(这对于在我的按钮类中保存函数指针是必要的),同时仍能调用该函数。您有任何想法如何解决这个问题吗?