2014-07-18 3 views
0

사용자 인터페이스를 만들고 있는데 두 개의 기본 클래스는 UIControlUIView입니다. 둘 다 추상 클래스입니다. UI의 각보기 (예 : 기본 메뉴 등)에는 UIView가 부모 클래스로 있습니다. 이 파생 뷰 클래스가 자신의 멤버 함수를 컨트롤의 콜백으로 할당 할 수 있기를 바랍니다. 어떻게이 일을 성취 할 수 있습니까? 아래다형성 클래스의 콜백 함수 멤버

Psuedocode : 당신은

static void button1_click(int button, int x, int y); 
// ^^^^^^ 

이 컴파일 얻기 위해 변경해야합니다

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

.

또 다른 가능성은, 또한

void (UIView::*m_callback_click)(int button_index, int x, int y); 

처럼 UIControl 클래스의 멤버 함수 포인터를 선언하는 것입니다 - @Joachim Pileborg가 sugessted로 -하는 std::function 객체를 관리하는 것을 선호 대신에 원료를 들고 함수 포인터. 언급 한 바와 같이 std::bind을 사용하여 제대로 할당 할 수 있습니다.

관련 문제