我正在开发一个基于网络的服务器,它可能有100个状态和动作/事件。到目前为止,我已经使用简单的switch语句进行了管理,但现在感觉需要一个状态机,我可以通过text / xml文件在外部进行配置。
您对现有C ++状态机有什么建议,允许我从文件外部配置状态/事件?
我看了一下boost状态机,但它似乎缺乏从状态机文件生成类的能力,我不想手动创建100个类?
还有什么其他选择?
答案 0 :(得分:1)
如果你想要灵活,你应该寻找Qt状态机 http://doc.qt.nokia.com/4.6/statemachine-api.html
答案 1 :(得分:1)
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的“实验”状态,到目前为止我还没有遇到任何问题。