我如何用多态实现这个?

时间:2010-11-04 23:26:48

标签: c++

我的游戏gui api支持2个后端。它们的工作方式类似,并使用事件队列。问题是我不希望我的API处理整个游戏的事件,只看一个事件并做一些事情,然后让游戏做任何事情。这就是为什么我不能只给它事件队列。我的问题是,我将有一个名为handleEvent的方法,它将接收一个指向事件的指针,但是为了它可以工作,这必须是一个空*但我觉得这是不好的做法。我能做什么? 感谢

3 个答案:

答案 0 :(得分:1)

为处理程序查看的事件创建基类。为两个后端的事件创建子类。引发事件时,将它们包装在适当的子类中。然后,您的处理程序可以获取基类的对象。

答案 1 :(得分:1)

嗯,这取决于许多不同的因素,但我怀疑你会想要double-dispatch(对于这种特殊情况),除非你的事件类型具有相似的特征和处理行为。在任何一种情况下,您都应该有一个表示任意事件的纯虚基类,然后您应该创建从该基类派生的具体事件类。然后,您的事件处理程序可以接受基类型,并使用公共接口来处理该事件。如果你发现自己做了“如果它是这种类型的事件,那么__,否则如果它是那种类型的事件 _ ”,那么你可能会想要使用双重调度,这允许您可以为更具体的事件子类型选择更具体的处理程序,而无需使用RTTI操作或烘焙已识别的事件类型集。

class Event {
    public:
        virtual void dispatch(EventHandler* handler) const = 0;
};

class EventHandler {
    public:
        virtual void handle(const Event* event) {
            event->dispatch(this);
        }
        virtual void handleMouseClickEvent(const MouseClickEvent* mouseclick) {
            // ...
        }
};

class MouseClickEvent : public Event {
     public:
        virtual void dispatch(EventHandler* handler) const {
            handler->handleMouseClickEvent(this);
        }
};

答案 2 :(得分:0)

您所做的是使用虚拟handleEvent方法创建基类。您的两个后端中的每一个都需要覆盖此基类并提供自己的handleEvent实现。