2014-07-18 91 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正確分配。