我正在开发一个包含一些按钮的 OpenGL 菜单。我希望能够将任何类的操作(成员函数(具有固定签名)!)与按下按钮时执行的按钮相关联。我现在可以做到,但仅限于一种类型。我希望能够将任何类的任何成员函数用于我的回调。
现在我正在这样做:
#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 将其转换为正确的类,但我无法让它工作。最后,我总是遇到无法完全消除回调函数的类类型(这对于将函数指针保存在我的按钮类中是必要的)并且仍然能够调用该函数的问题。
你知道如何解决这个问题吗?