我想实现GUI作为状态机。我认为这样做有一些好处和缺点,但这不是这个问题的主题。状态机表示
在阅读了一些这方面的内容之后,我发现了几种使用C++建模状态机的方法,但我坚持使用2,但我不知道哪种方法更适合GUI建模。
代表的国家机器的状态与以下方法列表:
OnEvent(...);
OnEnterState(...);
OnExitState(...);
从
StateMachine::OnEvent(...)
我的事件转发到CurrentState::OnEvent(...)
和她的做出是否做出过渡的决定。在过渡我打电话CurrentState::OnExitState(...)
,NewState::OnEnterState()
和CurrentState = NewState;
这种方法的国家将紧密结合的行动,但
State
可能会变得复杂,当从一个状态我可以去多个国家,我必须要为不同的转换不同的动作。代表的国家机器作为过渡的列表与以下属性:
InitialState
FinalState
OnEvent(...)
DoTransition(...)
从
StateMachine::OnEvent(...)
我转发事件到InitialState
在状态机中具有与CurrentState
相同的值的所有转换。如果满足转换条件,则停止循环,调用DoTransition
方法,并将CurrentState
设置为Transition::FinalState
。使用这种方法
Transition
将非常简单,但转换计数可能会变得非常高。另外,要追踪一个国家接收事件时将采取的行动将变得更加困难。
您认为哪种方法更适合GUI建模。你知道其他表述可能对我的问题更好吗?
你有没有使用状态机库认为像[Boost.Statechart](http://www.boost.org/doc /libs/release/libs/statechart/doc/index.html)或[Boost.Meta状态机](http://www.boost.org/doc/libs/release/libs/msm/doc/HTML/index。 HTML)? –
我假设你的意思是'current_state-> OnEvent()',而不是'CurrentState :: OnEvent()'? –
@BjörnPollex:这些库提供了什么功能,使得在调试时有必要通过Boost代码? –