我正在开发一个基于网络的服务器,它可能有 100 多个状态和动作/事件。到目前为止,我已经使用简单的 switch 语句进行了管理,但现在觉得需要一个状态机,我可以通过 text/xml 文件在外部配置它。
您对允许我从文件外部配置状态/事件的现有 C++ 状态机有什么建议?
我查看了 boost 状态机,但它似乎缺乏从状态机文件生成类的能力,我不想手动创建 100 个类?
还有什么其他选择?
我正在开发一个基于网络的服务器,它可能有 100 多个状态和动作/事件。到目前为止,我已经使用简单的 switch 语句进行了管理,但现在觉得需要一个状态机,我可以通过 text/xml 文件在外部配置它。
您对允许我从文件外部配置状态/事件的现有 C++ 状态机有什么建议?
我查看了 boost 状态机,但它似乎缺乏从状态机文件生成类的能力,我不想手动创建 100 个类?
还有什么其他选择?
QP (http://www.state-machine.com) 是另一种选择,在我看来,它对模型驱动的开发非常友好。我最近读了一篇支持我观点的学期论文:http: //security.hsr.ch/mse/projects/2011_Code_Generator_for_UML_State_Machines.pdf
从理论上讲,您还可以使用 boost::msm eUML 前端,它具有非常无噪音的语法。这是 boost 中的一个简单示例:
BOOST_MSM_EUML_TRANSITION_TABLE((
Playing == Stopped + play [some_guard] / (some_action , start_playback) ,
Open == Stopped + open_close/ open_drawer ,
Stopped == Stopped + stop ,
Empty == Open + open_close / close_drawer ,
Open == Empty + open_close / open_drawer ,
Stopped == Empty + cd_detected [good_disk_format] / store_cd_info
),transition_table)
我不知道如何认真对待 eUML 的“实验”状态,到目前为止我还没有遇到任何问题。
如果你想灵活一点,你应该寻找 Qt 状态机 http://doc.qt.nokia.com/4.6/statemachine-api.html