函数指针数组的一个有关问题

函数指针数组的一个问题typedef struct _MESSAGE_MAP_ENTRY{UINT messageLRESULT (CMainFrame::*pFunc)(W

函数指针数组的一个问题

typedef struct _MESSAGE_MAP_ENTRY
{
UINT message;
LRESULT (CMainFrame::*pFunc)(WPARAM, LPARAM);
}MESSAGE_MAP_ENTRY, *PMESSAGE_MAP_ENTRY;


LRESULTCMainFrame::DispatchWindowMessage(UINT message, WPARAM wParam, LPARAM lParam)
{
static const MESSAGE_MAP_ENTRY MessageMap[] =
{
WM_COMMAND, OnCommand,
WM_PAINT, OnPaint,
WM_DESTROY, OnDestroy
};

static int M = ARRAYSIZE(MessageMap);

for (int i = 0; i < M; i++)
{
if (MessageMap[i].message == message)
{
return (*(MessageMap[i].pFunc))(wParam, lParam); // ???
}
}

return ::DefWindowProc(m_hWnd, message, wParam, lParam);
}


有问号的一行,我试了好几种书写方法,编译器总是报错
这种情况,应该怎么调函数? Windows?Mobile
[解决办法]
(this->*(MessageMap[i].pFunc))(wParam, lParam);
[解决办法]
引用:
Quote: 引用:

(this->*(MessageMap[i].pFunc))(wParam, lParam);
原来如此!但是改了以后,这里是没问题了,编译器又报了一个别的错误:
“CMainFrame::OnDestroy”: 函数调用缺少参数列表;请使用“&CMainFrame::OnDestroy”创建指向成员的指针
这里,三个函数都是类的成员函数,为什么要加上“&CMainFrame::”才能识别?


唉,你C++的基础都还没过关,就去搞MFC.......

OnDestroy是一个成员函数,成员函数与常规函数不一样,是没有从函数到指针的转换的,原因是成员函数的左值不可获得,所以不能直接使用CMainFrame::OnDestroy,得加上&操作符。