我的班级 GUI_clickable 存储一个函数指针 m_fOnReleased ,以便在需要时回调:
class GUI_clickable
: virtual public GUI_focusable
{
void (*m_fOnReleased)(); //function pointer
void setFOnRleased( void (*fOnReleased)() )
{
m_fOnReleased = fOnReleased;
};
virtual void onMouseButtonReleased();
{
(*m_fOnReleased)(); //call the pointed function
}
};
另一个类使用 GUI_clickable 并设置它,以便回调其中一个成员函数:
class GUI_dlg_test
: public GUI_dlg
{
GUI_clickable m_eButton;
void onButton(){ fprintf(stderr,"Hello onReleased !\n"); };
GUI_dlg_test();
};
GUI_dlg_test::GUI_dlg_test()
: GUI_dlg()
{
m_eButton.setFOnRleased( &this->onText );
}
我知道此代码仅在 onButton 设置为静态时才有效。但在这种情况下,我无法访问 onButton()
中的实例成员另一种解决方案是将 m_fOnReleased 的类型设置为 GUI_dlg_test 的成员函数
void (GUI_dlg_test::*m_fOnPressed)(); //function pointer
但我不确定 m_fOnReleased 将始终来自 GUI_dlg_test 还是来自其他 GUI_dlg 孩子
有没有办法将 m_fOnReleased 的类型设置为指向非静态函数的指针,而不知道它将来自哪个类?
感谢您的帮助