gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 02:00:26 26 4
gpt4 key购买 nike

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

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

因此,我想为 Event、State 和 FSM 定义类。 FSM 有一个 State 集合(可能是 vector ,如果 STL 在嵌入式系统中出现问题,可能是链表),State 有一个 Event 集合。

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

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

如何最好地编写代码?您能否举例说明两个简单的 FSM,或一个具有两个状态且每个状态有两个事件的 FSM?

例如,如果我有

enum myEvents {a, b, c};enum hisEvents {d, e, f, g};

我希望能够声明一个接受构造函数参数的事件类

(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); }
};

一些你需要如何处理 Action 等等,你会想把它搞砸一点以获得多个状态机,但我希望这能让你开始。

关于c++ - 需要有关 C++ 模板的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2025217/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com