多态类的回调函数成员

时间:2014-07-18 12:21:15

标签: c++ callback member

我正在制作用户界面,两个主要类别是UIControlUIView。 两者都是抽象类。 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;
}

1 个答案:

答案 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正确分配。