2013-06-06 11 views
0

적절한 이벤트가 발생할 때 호출 할 객체의 멤버 함수를 객체에 저장하려고합니다. 불행히도이 코드는 많은 오류 메시지를 표시합니다. 아무도 나를 도울 수 있습니까? 잘 작동 다음 보정 : boost :: function을 사용하여 임의의 객체의 멤버 함수에 함수 포인터를 저장하십시오.

http://pastie.org/8014181

업데이트

: 이것은 다음과 같은 오류가 제공

class MainPage 
{ 
public: 

    MainPage::MainPage(void) 
    { 
     image1 = new STImagePanel("Untitled.png"); 
     image1->OnPointerPressedHandler->add(&MainPage::imageMousePressed,this); 
    } 

    void MainPage::imageMousePressed(STObject* sender, STPointerEventArg * args) 
    { 
     MainPage * dsda = (MainPage*)this; 
     pres = true; 
    } 

}; 


template<class SENDERTYPE, class ARG> 
struct callbackInfo 
{ 
    boost::function<void(SENDERTYPE, ARG)> func; 
}; 

template<class SENDERTYPE, class ARG> 
class STEventHandler 
{ 
public: 
    template<class T, class P> 
    void add(T x, P that) 
    { 
     //The following line gives the error 
     callbackInfo<SENDERTYPE,ARG> tmp { boost::bind(x,that,_2)}; 
     functions->addLast(tmp); 
    } 

private: 
    STLinkedList<callbackInfo<SENDERTYPE,ARG>>* functions; 
} 

내가 MainPage::imageMousePressed(STObject* sender, STPointerEventArg * args) 두 개의 인수가 참조

template<class T, class P> 
void add(T x, P that) 
{ 
    boost::function<void(SENDERTYPE,ARG)> func(boost::bind(x,that,_1,_2)); 
    callbackInfo<SENDERTYPE,ARG> tmp; 
    tmp.func = func; 
} 

답변

0

하나의 문제를, boost::bind으로 전화를 걸면 보낸 사람에게 _2 만 바인딩합니다. 그게 효과가 없어요. 둘 다 바인드하거나 NULL 또는 일부 센티널 값을 전달해야합니다. 당신이 boost::signals

+0

감사합니다. 이 줄을 시도했지만 여전히 작동하지 않습니다. callbackInfo tmp {boost :: bind (x, that, _1, _2)}; – DalekSupreme

0

두 제안 개혁있는 것처럼

더 일반적으로

, 그것은 나에게 같습니다

1) 코드에서 당신이 첫 번째 오류 메시지가 어떤 헤더 포함을 예방할 수 없었다;

2) 클래스 MainPage 정의의 끝에 세미콜론이 없습니다.