现声明以下内容;
virtual void fireEvent(),执行这个事件;virtual std::type_index getListenerType(),返回监听这个事件的监听器类;virtual ~EventListener() = default;。部分实现:
class myListener : public EventListener { ... } 来自定义一个监听器;
virtual void onInput(int inputNumber) = 0;;class myEvent : public Event<myListener> { ... } 来自定义一个事件;
std::type_index getListenerType() override { ... }。fireEvent 和 getListenerType;class myEvent : public Event<myListener> { public: int myNumber; ...... };;eventManager.addEventListener(std::type_index(typeid(myEvent)), myListener);,其中 eventManager 是类 EventManager 的实例,该类中实现了订阅事件、取消订阅和触发事件;当我接收到了一个消息的时候,我需要把这个消息传递给任意个数个「事件监听器」,这个方法是应该可以用的。
但是,我在订阅事件的时候,在 listenersMap 里存入了 eventType : eventListener 的键值对;
在 fireEvent 的时候,因为我没有办法使用类似于 listenersMap.get(listenerType) 的东西来获取所有符合类型为 listenerType 的 EventListeners,我只能使用 listenerMap.find(eventType);
那么:
getListenerType() 是不是没用了?addEventListener 和 removeEventListener,把原先传入的 eventType 变为 listenerType?
代码实现:洛谷云剪贴板 aqfanzl2