C++:识别事件系统中的多态事件

问题描述

我目前正在尝试用 C++ 编写一个事件系统。问题很具体,很抱歉长时间阅读...


什么有效?

Events 看起来像这样:

class IEvent { //interface stuff };

class EventA : public IEvent { // A implementation };

class EventB : public IEvent { // B implementation };

现在所有应接收和处理事件的对象都基于 EventHandler 接口:

class IEventHandler
{
public:
    virtual void eventCallback(IEvent*) = 0;
};

// Example implementation
class HandlerImplementation : public IEventHandler
{
public:
    // Overloads for several events (different for each implementation of the handler interface)
    virtual void eventCallback(EventA*) { cout << "This is an A event." << endl; }
    virtual void eventCallback(EventB*) { cout << "This is a B event." << endl; }
    // "Fallback"
    virtual void eventCallback(IEvent*) override { cout << "Some other event..." << endl; }
};

这按预期工作。在我的 EventHandler 接口上构建的每个类都会为每个 Event 类型(或函数调用适当的回调函数

int main()
{
    class EventC : public IEvent {};
    EventA a;
    EventB b;
    EventC c;

    HandlerImplementation handler;
    handler.eventCallback(&a); // This is an A event.
    handler.eventCallback(&b); // This is a B event.
    handler.eventCallback(&c); // Some other event...
}

什么不起作用?

事件不应该总是在发生时处理。处理程序可能想要缓冲它们,以便可以安排处理。

我尝试像这样扩展 EventHandler 接口:

class IEventHandler
{
public:
    virtual void eventCallback(IEvent*) = 0;
private:
    std::priority_queue<IEvent*> event_queue;
};

然而,存储在此队列中的 IEvent 指针当然只会触发“认”回调,而不会触发任何重载。

有什么方法可以“记住”哪些 Event 类型已向上转换为 IEvent* 或者您是否知道可以完全避免这种情况的任何模式?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)