我相当确定这是一个模板问题,因为我似乎无法以任何其他方式解决它 - 但也欢迎非模板解决方案。
有限状态机有许多程序状态,每个状态都可以对许多事件做出反应。
所以,我想为 Event、State 和 FSM 定义类。FSM 有一个状态集合(可能是向量,如果 STL 在嵌入式系统中出现问题,可能是链表),而 State 有一个事件集合。
每个状态和事件都有一个唯一的 Id 和一个用于调试 porpoise 的名称字符串。
尴尬的是,我不希望 Id 是整数,而是枚举的元素。每个 FSM 的状态和事件都有不同的枚举。
如何最好地编码?你能举两个简单的 FSM 的例子,或者一个有两个状态的 FSm,每个状态有两个事件吗?
例如,如果我有
枚举 myEvents {a, b, c}; 枚举 hisEvents {d, e, f, g};
我希望能够声明一个接受构造函数参数的事件类
(myEvents a,char *"event_a")和
(hisEvents g,char* "event_g")请注意,我不想只重载构造函数,因为这是限制性的——如果添加了新的事件枚举怎么办?
与状态类似,然后让我的 FSM 每个都有一个状态列表。
或者我只是一个人,坚持使用 eventId 的枚举,而传递一个 int 会简单得多?
谢谢。
顺便说一句,我宁愿避免使用 Boost,因为它本身不确定它在嵌入式系统中的工作情况。我更喜欢内部开发,以便完全控制。