【发布时间】:2019-08-12 06:02:33
【问题描述】:
我正在学习将有限状态机用于某些任务,但在导航状态表和执行功能以使其成为有用的系统时遇到问题。
考虑一下我的状态机:
(来源:wikimedia.org)
说明:
* = 将字符打印到标准输出
N = '\n'
S = ' '
A = aA-zZ
我从Automata-based programming on Wikipedia 开始的代码适用于这么简单的机器,但我想对其进行修改,以便拥有更强大的状态转换表并根据这些状态调用函数。
我已经在 Pastebin 上发布了 working basic code 以及 the transtion table style I want to use。
我之前没有使用过指向函数的指针,所以我不确定如何根据process_event 接收到的数据编写转换函数。最终,我希望有一个模板,让我能够拥有状态输入/输出和转换输入/输出功能,这样我就可以更有效地编写复杂的用户菜单甚至编程算法。
【问题讨论】:
-
有趣的设置。你有什么问题?
-
我的问题是我不确定如何实现我的状态机来执行地址通过状态转换表传递给它的函数。 (第二个链接)
-
我现在有一个更完整的代码版本和一个带有一些调试输出的工作程序HERE。我遇到的主要问题是我无法为函数指针分配地址而不会出现编译器错误(我使用的是 g++)。我显然做错了什么,但我不明白......
-
好吧,我脑子里放了个屁……我有铸造问题,经过足够的返工后我解决了。我用调试信息HERE 做了一个简单的用户界面我的设计的缺点是它非常笨重,你需要修改 StateMachine 类,特别是事件处理器来处理一种新的交互。我会使用 BOOST::FSM,但这是在 ARM 微控制器上进行的,所以我需要自己编写
标签: c++ state-machine