要实现HandleEvent功能,根据收到的event的不同类型派发到不同函数处理。
声明如下:
class Foo
{
public:
Foo();
void HandleEvent(Event *pEvent);
private:
void HandleA(Event* pEvent);
void HandleB(Event* pEvent);
void HandleC(Event* pEvent);
typedef void(Foo::*EventHandler)(Event*);
std::map<EventType, EventHandler> handlers;
}
实现:
Foo::Foo()
{
handlers[Atype]=&Foo::HandleA;
handlers[Btype]=&Foo::HandleB;
handlers[Ctype]=&Foo::HandleF;
}
void FOO::HandleEvent(Event *pEvent)
{
EventHandler handler= handlers[pEvent->getType()];
(this->*handler)(pEvent);
}