gpt4 book ai didi

c++ - 我怎样才能用多态来实现这个?

转载 作者:行者123 更新时间:2023-11-28 03:54:45 25 4
gpt4 key购买 nike

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

最佳答案

好吧,这取决于许多不同的因素,但我想您会想要 double-dispatch (对于这种特殊情况),除非您的事件类型具有相似的特征和处理行为。在任何一种情况下,您都应该有一个表示任意事件的纯虚拟基类,然后您应该创建从该基类派生的具体事件类。然后,您的事件处理程序可以接受基类型,并使用公共(public)接口(interface)来处理该事件。如果你发现自己在做类似“如果是这种类型的事件,那么 __ ,否则如果是那种类型的事件就做_”之类的事情,那么你可能想要使用双重调度,它允许您可以为更具体的事件子类型选择更具体的处理程序,而无需使用 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);
}
};

关于c++ - 我怎样才能用多态来实现这个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4102328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com