这是一个很好的设计吗?

时间:2011-01-16 02:15:08

标签: c++

现在,我正在为游戏制作一个Gui图书馆。 Widgets为各种事件提供了几个回调/监听器。

关于它的事情是听众可以消耗一个事件。

这个问题来了。使用事件信息调用基类。它调用侦听器的回调。他们中的任何一个都可以处理这个事件。

这意味着用户可以检查事件是否已被处理。

前:

void TextBox::MouseClick(MouseEvent &event)
{
   Widget::MouseClick(event);

    if(!event.isHandled())
    {
       //do stuff
    }

}

另一种方法是隐藏它并拥有onMouseClick(...)这是虚拟的,除非符合条件,否则不会被调用。我觉得这样做比较混乱,并且对于那些制作更多活动的人来说很烦人。

这是一个好设计吗?如果没有什么可以更好地适应这个?

由于

1 个答案:

答案 0 :(得分:1)

如果您想参加许多活动,我宁愿选择onMouseClick方式(IIUC):

void TextBox::onMouseClick(MouseEvent &event)
{
       //do stuff or empty of not needed
}
类Widget中的

void Widget::MouseClick(MouseEvent &event) // nonvirtual
{
  // do the listeners' stuff
  if(event.isHandled()) onMouseClick(event);
}