class MainWindow {
virtual LRESULT CALLBACK wndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
virtual LRESULT onLButtonUp(WPARAM wParam, LPARAM lParam);
};
class SubWindow : virtual public MainWindow {
virtual LRESULT onLButtonUp(WPARAM wParam, LPARAM lParam); // overridden
};
LRESULT MainWindow::wndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
if(msg==WM_LBUTTONUP) {
//this->onLButtonUp(wParam, lParam); // 이걸 실행하면 당연히 SubWindow::onLButtonUp(WPARAM, LPARAM)이 실행될 것이다.
// 다음과 같이 function pointer를 이용해서 호출해도 derived class의 변경 내용이 적용될까?
LRESULT (MainWindow::*fp)(WPARAM, LPARAM)= &MainWindow::onLButtonUp;
return (this->*fp)(wParam, lParam);
}
}
저래도 subWindow->wndProc() 때 SubWindow::onLButtonUp()이 호출되니 좋군영.
User-defined message map을 만들 수 있겠당.
동적 호출을 말하는건가.
이런거 떄문에 멤버함수포인터가 크기가 다른 포인터랑 다른거임여
저래놓고 보니까 메시지맵이 왜 매크로 떡칠이 돼 있는지 잘 이해가 안 되는데...
매크로 안 쓰고도 HashMap 같은 거 하나만 멤버에 추가하면 되겠는데?