2011-11-16 103 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)。