我正在制作用户界面,两个主要类别是UIControl
和UIView
。
两者都是抽象类。 UI中的每个视图(例如主菜单等)都将UIView作为父类。我希望这些派生视图类能够将自己的成员函数指定为控件的回调。如何实现这一目标?
下面的Psuedocode:
class UIControl
{
public:
void (*m_callback_click)(int button_index, int x, int y);
// This class also statically calls callback_click if a control is clicked
}
class UIView
{
// Abstract class
}
class UIMainMenu : public UIView
{
public:
UIControl* m_button1;
void initialize();
void button1_click(int button, int x, int y);
}
void UIMainMenu::initialize()
{
m_button1 = new UIControl();
m_button1->m_callback_click = &button1_click;
}
答案 0 :(得分:0)
您需要更改
static void button1_click(int button, int x, int y);
// ^^^^^^
要编译它。
另一种可能性是在UIControl
类中声明成员函数指针,如
void (UIView::*m_callback_click)(int button_index, int x, int y);
另外, - 正如@Joachim Pileborg所说 - 更喜欢管理std::function
对象而不是持有原始函数指针。如上所述,您可以使用std::bind
正确分配。