我正在创建基于blender的GHOST系统的简单GUI系统,我认为在这个问题中不是很重要。 GHOST本身具有简单的事件系统。C++的事件系统
我的事件系统应该是灵活的,允许某种实现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++ event system design但我不知道选择哪一个以及为什么更好比其他。
我曾经想过要像java中的Swing那样做它。监听器类创建并注册以监听组件事件,并且监听器类必须从某个类继承。
为什么这种方法比使用回调函数的仿函数更糟? 你会选择哪个实现,为什么?
谢谢boost :: signals2是我找到的最好的解决方案之一。 – insanebits 2013-03-21 23:23:43