我相当确定这是一个模板问题,因为我似乎无法通过其他任何方式解决它-但也欢迎使用非模板解决方案。

有限状态机具有许多程序状态,并且每个状态都可以对许多事件使用react。

因此,我想为事件,状态和FSM定义类。 FSM具有状态的集合(可能是 vector ,如果STL在嵌入式系统中出现问题,则可能是链表),并且State具有事件的集合。

每个状态和事件都有一个唯一的ID和用于调试海豚的名称字符串。

尴尬的是,我不希望Ids是整数,而是一个枚举的元素。每个FSM的状态和事件都有不同的枚举。

如何最好地编写此代码?您能否举一个带有两个简单FSM或一个带有两个状态,每个状态带有两个事件的FSm的示例?

例如,如果我有

列举myEvents {a,b,c};
枚举hisEvents {d,e,f,g};

我希望能够声明一个支持构造函数参数(myEvents a,char *“event_a”)和(hisEvents g,char *“event_g”)的Event类
请注意,我不想只是重载构造函数,因为这是限制性的-如果添加了新的事件枚举该怎么办?

并且与状态类似,然后让我的FSM每个都有状态列表。

还是我只是被anel坚持使用eventId枚举,而通过int会更简单?

谢谢。

顺便说一句,我宁愿避免使用Boost,因为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/

10-10 19:25