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

时间:2011-11-16 08:47:32

标签: c++

大家。 最近我面临挑战。不能说这是一个关键问题,但只是一个有趣的事情。 有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引用静态OR非静态函数的类成员。

2 个答案:

答案 0 :(得分:1)

如果您希望它成功,您应该将成员变量m_callBack设为公共。然后你可以写

Data::setCallback(...);

...

Data::m_callBack();

或者更确切地说

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

答案 1 :(得分:0)

我认为你有设计问题。你想要一个非静态的Callback(即m_callBack),或者你想要将你的Callback定义为一个静态函数(即不需要this)。