我制作了一个Window
类,希望拥有一个可变函数,因此,如果我不想使用默认函数,可以在外部更改该函数。在标题中:
function<LRESULT(HWND, UINT, WPARAM, LPARAM)> handleMsg = DefWindowProc;
所以目标是能够在课堂外更改handleMsg
。效果很好,直到我想在新功能中使用this
为止:
LRESULT handleMsg(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg) {
case WM_CHAR: {
this->eventBuffer.push(new Event(
WM_CHAR,
static_cast<unsigned char>(wParam)
));
}
default: {
return DefWindowProc(hwnd, msg, wParam, lParam);
}
}
}
// main
window->handleMsg = handleMsg;
如果我不使用this
,则该代码有效。我尝试将函数包装在继承Window
一个(class MyWindow : Window
)的类中,然后尝试:
MyWindow *myWindow = new MyWindow;
window->handleMsg = myWindow->handleMsg;
,但我得到error C3867: 'MyWindow::handleMsg': non-standard syntax; use '&' to create a pointer to member
。我想与Window
类进行交互,而不是与派生类进行交互,因为我为Window
类设计了更多代码。有解决方案吗?