需要从静态成员调用函数(由静态指针引用)



每个人。最近我面临挑战。不能说这是一个关键问题,但只是一件有趣的事情。有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

所以,我知道我们可以从这样的指针调用函数:(this->*m_callBack(((。但是静态类成员无权访问"this"指针。当然,我可以用m_callBack指针存储父对象的指针,并调用(parent->*m_callBack(((。在同样的情况下,情况可能就不那么好了。所以,我的问题是:是否有其他方法可以从静态类成员调用m_callBack函数。此外,我对–如果m_callBack引用静态或非静态函数的类成员很感兴趣。

如果希望成员变量m_callBack工作,则应将其设为公共变量。然后你可以写

Data::setCallback(...);
...
Data::m_callBack();

或者更确切地说

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

我认为您有一个设计问题。要么您想要一个非静态的Callback(即m_callBack(,要么您想要将回调类型定义为一个静态函数(即不需要this(。

最新更新