2014-07-18 54 views
0

我正在制作一个用户界面,两个主类是UIControlUIView。 两者都是抽象类。 UI中的每个视图(例如主菜单等)都具有UIView作为父类。我希望这些派生视图类能够将其自己的成员函数作为控件的回调。这怎么能实现?下面多态类的回调函数成员

伪代码:

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

我建议你阅读['std :: function'](http://en.cppreference.com/w/cpp/utility/functional/function)和['std :: bind'](http:/ /en.cppreference.com/w/cpp/utility/functional/bind)。 –

回答

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 sugessted - ,宁愿管理std::function对象,而不是保持一个原始函数指针。如上所述,您可以使用std::bind正确分配。