我使用FSM制作了几个菜单,但界面非常笨重。我花了一年的时间休息,从编程到促进搬迁,今晚重新写了我的旧FSM代码。
可以看到HERE
我的代码存在的问题是,每当您更改实现时,都需要对StateMachine类和事件处理器进行大量返工。由于这是在嵌入式设备上,我不能使用BOOST :: FSM所以我想编写自己的类,它足够强大,可以处理菜单和编程反对象(例如PIC的ICSP是一个简单的FSM)
你们怎么建议我让我的状态机更有用?
答案 0 :(得分:1)
如果你正在编写自己的类 - 考虑实现一个通用的FSM,然后用状态和事件填充它。
基本上它是一个简单的界面,类似于这样的方法:
create();
addState(someState, stateFunction);
addEdge(someStateOrig, someStateDest, event);
processEvent(event);
start(startFromState);
那应该涵盖它。然后,当您创建FSM时 - 将其与状态一起提供,并在到达状态时执行函数,以及使FSM从一种状态移动到另一种状态的事件。
然后,您只需在某个状态启动FSM,这将成为启动状态,并提供事件。
如果您需要更改事件,函数或状态 - FSM实现保持不变,您可以更改使用它的代码。
这或多或少是Boost.FSM给你的,但是你说你不能使用它 - 所以自己动手: - )