我正在学习使用有限状态机来完成某些任务,但我在导航状态表和执行函数以使其成为一个有用的系统时遇到问题。
考虑我的状态机:
(来源:wikimedia.org)
说明:
* = 将字符打印到标准输出
N = '\n'
S = ' '
A = aA-zZ
我从Automata-based programming on Wikipedia开始的代码适用于这样一个简单的机器,但我想修改它,以便我可以拥有更强大的状态转换表并根据这些状态调用函数。
我已发布working basic code在 Pastebin,以及 the transtion table style I want to use .
我之前没有使用过函数指针,所以我不确定如何根据 process_event
接收到的数据编写转换函数。最终,我希望有一个模板,允许我具有状态输入/输出和转换输入/输出功能,这样我就可以更有效地编写复杂的用户菜单,甚至编程算法。
最佳答案
使用函数作为状态非常强大,但与使用递归函数(返回函数的函数状态)相比,使用转换表非常容易出错且痛苦。一个值得您考虑的绝佳实现是 quantum hierarchical statem machine 。虽然只有大约1000行代码作为基础,但它有an accompanying book解释您对其工作原理可能存在的任何疑问。非常强大,非常快。
关于c++ - 具有函数指针的有限状态机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6739271/