我相当确定这是一个模板问题,因为我似乎无法以任何其他方式解决它 - 但也欢迎非模板解决方案。
有限状态机具有多个程序状态,每个状态可以对多个事件使用react。
所以,我想为事件、状态和 FSM 定义类。 FSM 有一个状态集合(可能是 vector ,如果 STL 在嵌入式系统中出现问题,则可能是链表),而状态有一个事件集合。
每个状态和事件都有一个唯一的 ID 和一个用于调试 porpoises 的名称字符串。
尴尬的是,我不希望 Id 是整数,而是枚举的元素。每个 FSM 都有不同的状态和事件枚举。
如何最好地编码?您能否举一个具有两个简单 FSM 的示例,或者一个具有两个状态(每个状态有两个事件)的 FSm?
例如,如果我有
enum myEvents {a, b, c}; enum hisEvents {d, e, f, g};
我希望能够声明一个接受构造函数参数的 Event 类
(myEvents a,char *"event_a")和
(hisEvents g,char* "event_g")请注意,我不想只重载构造函数,因为这是限制性的 - 如果添加新的事件枚举怎么办?
与状态类似,然后让我的 FSM 每个都有一个状态列表。
或者我只是在坚持使用枚举作为 eventId,而传递 int 会简单得多?
谢谢。
顺便说一句,我宁愿避免使用 Boost,因为它本身还不确定它在嵌入式系统中的工作效果如何。我更喜欢内部开发,以便完全控制。
最佳答案
我不确定我是否正确理解了事情,但我会尝试一下:
我假设您想通过定义转换来定义状态机;例如“当处于“myEvents”状态并且您看到“a”执行“event_a”时”
class State {};
template<T> RealState : State
{
static void Add(T event, char*) { /* save stuff */ }
};
class Event {};
template<T> RealEvent : Event {
RealEvent(T event, char* name) {RealState<T>(event, name); }
};
一些你需要采取的行动和诸如此类的东西,你会想要把它搞乱一点以获得多个状态机,但我希望这能让你开始。
关于c++ - 需要有关 C++ 模板的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2025217/