我正在基于搅拌机的 GHOST 系统创建简单的 GUI 系统,我认为在这个问题中不是很重要。GHOST 本身有简单的事件系统。
我的事件系统应该是灵活的,允许某种 MVC 模式的实现,智能内存释放,应该跨平台工作,应该用 c++0x 编写
以下示例显示了从 GHOST 继承的处理事件的方法。
bool Application::processEvent(GHOST_IEvent *event)
{
GHOST_IWindow *window = event->getWindow();
bool handled = true;
switch (event->getType()) {
case GHOST_kEventWheel:
{
mouseDriver->handleWheel((GHOST_TEventWheelData *) event->getData());
}
break;
case GHOST_kEventButtonDown:
{
mouseDriver->handleButtonDown((GHOST_TEventButtonData *) event->getData());
}
break;
case GHOST_kEventButtonUp:
{
mouseDriver->handleButtonUp((GHOST_TEventButtonData *) event->getData());
}
break;
case GHOST_kEventCursorMove:
{
mouseDriver->handleCursorMove((GHOST_TEventCursorData *) event->getData());
}
break;
case GHOST_kEventKeyUp:
{
keyDriver->handleKeyUp((GHOST_TEventKeyData *) event->getData());
}
break;
case GHOST_kEventKeyDown:
{
keyDriver->handleKeyDown((GHOST_TEventKeyData *) event->getData());
}
break;
}
return true;//currently not used while experimenting`
}
我编写了两个类 KeyDriver 和 MouseDriver,它们应该处理 GHOST 事件并通知那些对事件感兴趣的人。现在真正的问题是从驱动程序类实现进一步事件分发的最佳实践是什么,我已经阅读了几篇文章和解决方案,事件系统如何工作,如http://accu.org/index.php/journals/464或C++ 事件系统设计,但我不知道该选择哪个以及为什么一个比另一个更好。
我曾想过像 Java 中的 Swing 那样做。在哪里创建并注册了监听器类来监听组件事件,并且监听器类必须从某个类继承。
为什么这种方法比使用回调函数的仿函数更糟糕?您会选择哪种实现方式,为什么?