我已经使用 FSM/Pushdown Automaton 方法构建了一个解析器,就像这里(它工作得很好!):C++ FSM 设计和所有权 当解析器出现问题时,它允许我优雅地退出并向用户输出有用的错误消息阶段。
我一直想知道在我的程序的其余部分中完成这项工作的好方法,自然而然地,解析器方法突然出现在我的脑海中......
我会让每个对象成为一个状态,它有一个 event() 函数,该函数有一个 switch 语句,根据我所处的执行阶段调用对象特定的函数。我可以使用特定于对象的枚举来跟踪它,并使代码更具可读性(case parser
比 更具可读性case 5
)。这将允许我关闭我创建的状态的下推树(使用m_parent*
我的另一个问题中的方法)。
这是一个好的设计(强制所有东西都处于 FSM 模式)吗?有没有更好的方法,它会复杂多少(我发现 FSM 很容易实现和测试)?
感谢您的建议!
PS:我知道 boost 拥有人们可能需要的一切,但我想限制外部依赖,尤其是在 boost 上。c++0x 虽然没问题(但我认为在这里并不重要)