2011-11-16 2 views
0

모두에서 함수 (정적 포인터에 의해 참조 됨)를 호출해야합니다. 최근 나는 도전에 직면 해있다. 그것은 중요한 문제라고 말할 수는 없지만 흥미로운 점이 있습니다. SRC 코드가있다 :정적 멤버

class Data { 
typedef void (Object::*CallBack)(void); 

public: 
Data() : m_callBack(NULL) {} 
void setCallBack(CallBack ptr) 
{ 
    m_callBack = ptr; 
} 
void start() 
{ 
    Aux::someAction(); 
} 

private: 
static CallBack m_callBack; 

class Aux{ 
    public: 
    static someAction() 
    { 
     if(m_callBack) 
     { 
      // How to call function for this reference ? - m_callBack 
     } 
    } 
}; // End of 'Aux' class 
}; // End of 'Data' class 

그래서, 나는 우리가 그런 포인터에서 함수를 호출 할 수 있다는 것을 알고가 (이 -> * m_callBack)(). 그러나 정적 클래스 멤버는 'this'포인터에 액세스 할 수 없습니다. 물론 부모 포인터를 m_callBack 포인터로 저장하고 parent -> * m_callBack()을 호출 할 수 있습니다. 같은 경우에 그렇게 좋지 않을 수도 있습니다. 그래서, 내 질문 : 정적 클래스 멤버에서 m_callBack 함수를 호출하는 다른 방법이 있습니다. 또한 m_callBack이 정적 또는 비 정적 함수의 클래스 멤버를 참조하는 경우 흥미로운 점이 있습니다.

답변

1

멤버 변수 m_callBack을 사용하려면 public으로 설정해야합니다. 그런 다음

Data::setCallback(...); 

... 

Data::m_callBack(); 

또는 오히려

if (Data::m_callBack) 
{ 
    Data::m_callBack(); 
} 
+0

예. 좋은 생각이야. –

0

를 작성할 수 난 당신이 디자인 문제가있다 생각합니다. 정적이 아닌 Callback (예 : m_callBack)을 갖고 싶거나 콜백을 정적 함수 (예 : this)로 typedef하고 싶습니다.