【发布时间】:2012-07-06 21:42:19
【问题描述】:
我希望有人可以帮助我解决这个问题,或者至少指出我的方式的错误......
作为我的问题的简单说明,请考虑应用程序的一部分,您可以在其中进入“功能模式”操作状态。然后根据用户按下的功能键 F1-F4 可以使用四种子模式。默认进入 F1 模式。状态图开始如下:
用户可以随时按F1-F4切换到相应的模式。将这些转换添加到内部状态会导致以下结果:
显然,这是 (a) 一团糟,以及 (b) 需要定义的许多转换。如果在某个时候我想添加一个 F5Mode 那么......好吧,你明白了。为避免这种情况,我想执行以下操作:
Boost Statechart 允许我定义从 FunctionMode 到任何内部状态的转换,但结果不是我所期望的。实际结果如下:
即按 F1-F4 切换模式会导致外部 FunctionMode 状态退出并重新进入,同时触发不需要的退出和进入操作。
早在 2006 年,库作者和用户之间的this thread 似乎描述了同样的问题。我认为作者建议做以下解决方法:
但是,这种变通方法对我来说似乎不是很有吸引力:它添加了一个额外的状态级别来编译,代码变得不太可读,必须使用深度历史来返回任何功能模式子状态和中间状态对象被不必要地再次破坏和构造。
那么……我哪里错了?或者有什么替代方案?我已经简要了解了 Boost Meta State Machine (msm),但从目前所见,我更喜欢 Statechart 的外观。
我很惊讶更多的用户没有遇到同样的问题......这让我觉得也许我的方法是完全错误的!
【问题讨论】:
标签: c++ boost boost-statechart