在阅读了一些关于此的资料后,我发现有几种用C++建模状态机的方法,但我卡在了两种上,但我不知道哪种方法更适合GUI建模。
1. 将状态机表示为具有以下方法的状态列表: - OnEvent(...) - OnEnterState(...) - OnExitState(...)
从 StateMachine::OnEvent(...) 转发事件到 CurrentState::OnEvent(...),并在此处做出是否进行转换的决定。在转换时,我会调用 CurrentState::OnExitState(...)、NewState::OnEnterState() 和 CurrentState = NewState;
使用这种方法,状态将与操作紧密耦合,但当我可以从一个状态转移到多个状态并且必须针对不同的转换采取不同的操作时,State 可能会变得复杂。
2. 将状态机表示为具有以下属性的转换列表: - InitialState - FinalState - OnEvent(...) - DoTransition(...)
从 StateMachine::OnEvent(...) 将事件转发到所有转换,其中 InitialState 与状态机中的 CurrentState 具有相同的值。如果满足转换条件,则停止循环,调用 DoTransition 方法,并将 CurrentState 设置为 Transition::FinalState。
使用这种方法,Transition 将非常简单,但转换计数可能会非常高。同时,跟踪一个状态在接收事件时将执行哪些操作将变得更加困难。
你认为哪种方法更适合GUI建模?你是否知道其他表示法可能更适合我的问题?
current_state->OnEvent()
,而不是CurrentState::OnEvent()
? - Ben Voigt