我有两个类(class),他们对自己一无所知,类(class) A,类(class) B。
A 类称为 ENGINE, B类称为GUI。
我希望 GUI 类有一个指向 ENGINE 类中的函数的指针,这样当 GUIControl 上发生事件时,它会调用带有两个参数 (int,int) 的 ENGINE 成员函数。
这是我想要的方式:
class CGUIManager
{
public:
void SetControlCallback(void(*pFunctionPointer)(int,int) );
private:
void (*m_pControlCallbackFunction)(int,int) ;
};
void CGUIManager::SetControlCallback(void(*pFunctionPointer)(int,int) )
{
if(pFunctionPointer)
m_pControlCallbackFunction = pFunctionPointer;
}
class CEngine
{
private:
void GUIControlsCallback(int iControlID, int iControlMessage);
CGUIManager *pGUI;
};
现在在初始化 ENGINE 时,我想调用:
//Set Controls Callback to CEngine Method
pGUI->SetControlsCallback( GUIControlsCallback );
要在 CGUIManager 类中注册一个回调,它指向 CEngine 类中的一个方法。
我该怎么做?
提前致谢。
最佳答案
如果你希望它是 oo 而不是函数指针(必须指向静态成员 btw),我建议使用接口(interface)(或类似的东西)
class IGuiCallback
{
public:
virtual void GUIControlsCallback(int iControlID, int iControlMessage)=0;
};
class CGUIManager
{
public:
void SetControlCallback(IGuiCallback*);
private:
IGuiCallback* m_pCallback;
};
class CEngine:public IGuiCallback
{
public:
void GUIControlsCallback(int iControlID, int iControlMessage);
private:
CGUIManager *pGUI;
};
然后在引擎中:
pGUI->SetCallback(this);
我的代码中可能有一些语法错误,但你应该明白了
关于c++ - 两个类 (A,B) - B 有一个指向类 A 非静态方法的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9226166/