Calling a function pointer in C++ is ugly. So the best way to do it is to encapsulate it in a friendlier package.
Code:
class Player { public:
int (Player:: * DefProcedure)(UINT Msg, WPARAM wParam, LPARAM lParam);
int Handle(UINT Msg, WPARAM wParam, LPARAM lParam){
(*this.*DefProcedure)(Msg, wParam, lParam);
}
int Kill(UINT Msg, WPARAM wParam, LPARAM lParam){
//...
}
int ShowMercy(UINT Msg, WPARAM wParam, LPARAM lParam){
//...
}
Player(){
DefProcedure = &Player::ShowMercy;
}
};
// syntax:
player.Handle(msg, wParam, lParam);