我有基类Object
和一个Event
class Object
{
//...
};
class Event
{
};
以及函数指针的 typedef
typedef void (Object::*PF) (Event*);
还有一个不相关的类,它存储两个指针
class Dispatcher
{
public:
Dispatcher (Object* obj, PF pf) : _obj (obj), _pf (pf)
void call (Event* event)
{
_obj->*pf (event);
}
Object* _obj;
PF _pf;
};
然后我有一个具体的对象和一个具体的事件
class ConcreteEvent : public Event
{
};
class ConcreteObject : public Object
{
public:
void handle (ConcreteEvent* event)
{
// Do something specific for ConcreteEvent
}
};
然后像这样称呼它
ConcreteObject* obj = new ConcreteObject();
Dispatcher dispatcher (obj, static_cast<PF>(&ConcreteObject::handle));
ConcreteEvent* event = new ConcreteEvent ();
dispatcher.call (event);
ConcreteEvent
我保证将始终使用正确的事件调用调度程序,即当它封装的函数指针实际上占用时,我不会调用调度程序并传递它SomeOtherConcreteEvent
问题是:这能保证有效吗?在 linux 和 mingw 上的 gcc 4.7 中肯定可以正常工作。