大家。 最近我面临挑战。不能说这是一个关键问题,但只是一个有趣的事情。 有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非静态函数的类成员。
答案 0 :(得分:1)
如果您希望它成功,您应该将成员变量m_callBack设为公共。然后你可以写
Data::setCallback(...);
...
Data::m_callBack();
或者更确切地说
if ( Data::m_callBack )
{
Data::m_callBack();
}
答案 1 :(得分:0)
我认为你有设计问题。你想要一个非静态的Callback
(即m_callBack
),或者你想要将你的Callback定义为一个静态函数(即不需要this
)。