这是我的情况:
我有一个事件驱动系统,我所有的处理程序都从IHandler
类派生,并实现一个onEvent(const Event &event)
方法。现在,Event 是所有事件的基类,并且只包含枚举的事件类型。所有实际事件都来自它,包括EventKey
事件,它有 2 个字段:(uchar) keyCode
和(bool) isDown
。
这是有趣的部分:我EventKey
使用以下语法生成一个事件:
Event evt = EventKey(15, true);
我将它运送给处理程序:
EventDispatch::sendEvent(evt); // void EventDispatch::sendEvent(const Event &event);
(EventDispatch
包含一个链接列表,并使用包含已发送事件的参数IHandlers
调用它们的方法。onEvent(const Event &event)
现在实际的问题:
假设我希望我的处理程序轮询类型队列中的事件,Event
我该怎么做?
具有引用计数的动态指针听起来像是一个太大的解决方案。
制作副本比听起来更困难,因为我只收到对基本类型的引用,因此每次我都需要检查事件的类型,向上转换
EventKey
然后制作副本以存储在队列中。听起来像是唯一的解决方案——但令人不快,因为我需要了解每一种类型的事件,并且必须检查收到的每一个事件——这听起来像是一个糟糕的计划。我可以动态分配事件,然后发送指向这些事件的指针,如果需要,将它们排入数组中 - 但除了引用计数之外 - 我如何能够跟踪该内存?你知道有什么方法可以实现一个不会干扰用户的非常轻的参考计数器吗?
您认为这个设计的一个好的解决方案是什么?