传递任何类的任何成员函数作为Callback函数
|
我正在处理包含一些按钮的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将其转换为正确的类,但无法使其正常工作。最后,我总是遇到一个问题,就是我无法完全消除回调函数的类类型(将函数指针保存在我的按钮类中是必需的)而仍然能够调用该函数。
您有解决该问题的想法吗?
没有找到相关结果
已邀请:
4 个回复
剃摧庭峨僳
和
一起使用(如果是C ++ 0x,则将
和
一起使用),例如
膛嵌墒缅欠
的任何对象一起使用。您可以在Boost,TR1和C ++ 0x中找到一个。
非常适合这些对象。
耐钨徒
有关Ideone的完整示例。
梆晨灸碾