开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
vs2010
问题(Question):
我想在自己的 class Display 实现 callback 功能 , 让其他 class 使用
目前我想比较正式的方法应该是用 template 方式去做,但这份
class 要改成 template 的话有些工程,故想加上 function pointer 方式去做,
但发现好像不能塞其他 class 之 member function,
问题之程式码简化如下,
同步附 Code http://codepad.org/nT3XDA5q
//////
class Display
{
private:
void (*m_CallBackFunc)(int) ;
public:
Display( void (*CallBackFunc)(int) = NULL)
: m_CallBackFunc( CallBackFunc )
{
}
void ToUpdateDisplay(int iSel)
{
if(m_CallBackFunc)
if(rand() & 1) // some condition here
m_CallBackFunc(iSel);
}
};
///////
class PlaneDlg
{
private:
Display m_display;
public:
PlaneDlg ()
: m_display ( UpdateDisplay ) // <- 人是它杀的 ...
// : m_dysplay ( & PlaneDlg :: UpdateDisplay) // 这样还是救不了它 ..
{
}
void UpdateDisplay(int iGrp)
{
// do something..
}
};
上述黄色部份我不知道该怎么才能让它过 ,
vs 的错误讯息是
'Display::Display(,void (__cdecl *)(int))' : 无法将参数 2 从 'void
(__thiscall PlaneDlg::* )(int)' 转换成 'void (__cdecl *)(int)'
希望能动到最小的 Display ,去实现这个功能。
另也希望版友能针对此问题提供一些架构上的意见,
避开日后同样的问题再重现。
非常感谢各位!