【问题标题】:What is the reason of having a "Dispatch" function on an Event?对事件具有“调度”功能的原因是什么?
【发布时间】:2012-08-13 05:27:49
【问题描述】:

我一直在阅读有关事件管理器的信息,并且我了解基本机制,或者我是这么认为的。我一直在看到诸如

之类的情况
IEvent* pEvent = m_events;

while(pEvent)   {
    removeEvent(pEvent);
    pEvent->Dispatch(); // What is this?
    pEvent = pEvent->Next;
}

但是,做“pEvent->Dispatch”有什么意义呢?我认为这与事件监听有关,但我不确定是否诚实。

【问题讨论】:

    标签: c++ events design-patterns architecture event-handling


    【解决方案1】:

    在调用您提供的代码片段时,事件的“侦听”已经完成。 “监听”之后,所有的事件都已经收集到了某个容器中,每个事件都需要进行处理。 Dispatch 可能是IEvent 类上的虚拟方法,因此每个派生事件都可以由特定于该类型事件的例程处理。

    class IEvent {
    protected:
        virtual ~IEvent () {}
        virtual void Dispatch () = 0;
        //...
    };
    

    【讨论】:

    • 只是出于好奇,为什么要将Dispatch 方法设为protected
    • @maba:我在想调度循环将是IEvent 本身的一个静态函数。我本可以将其设为私有,但受保护只是我对接口类的习惯性默认设置。
    • 好的,我更喜欢将它们公开,以便它们对应于例如 Java 中的接口。然后可以从 EventManager 或类似的地方调用它们。
    • 我只是想确定一下,所以如果事件类似于 CREATE_OBJECT,在 Dispatch 中,这就是 Dispatch 应该创建对象的地方?
    • @mmurphy:调度可能会出于自身原因推迟对事件的处理,但是是的,一般来说,事件的调度例程运行处理事件的代码。
    猜你喜欢
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-10
    • 1970-01-01
    • 2013-02-16
    • 2021-09-01
    相关资源
    最近更新 更多