2011-11-16 97 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指針和call(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)。