c++ - 需要有关 C++ 模板的帮助

标签 c++ templates fsm

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

有限状态机具有多个程序状态,每个状态可以对多个事件使用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/

相关文章:

algorithm - 使用自然语言生成解读句子中的单词

python - 使用装饰器创建类

c++ - 我怎样才能得到一个返回自身的 boost::function (或其他通用函数包装器)?

c++ - QThread 移动到线程。 QThread 中的同步

c++ - c++14 std::experimental::filesystem::v1 和 c++17 std::filesystem 之间的区别?

c++ - Qmake:如何在不更改 qmake.conf 的情况下删除某个项目的编译器标志?

c++ - 模板类之间的可见性

c++ - 了解将调用哪个方法

c++ - 成员函数中静态变量的替代方法

c++ - 返回子类实例的父类(super class)中的方法