基于boost状态机生成类

时间:2010-03-23 15:14:34

标签: boost state-machine

我正在开发一个基于网络的服务器,它可能有100个状态和动作/事件。到目前为止,我已经使用简单的switch语句进行了管理,但现在感觉需要一个状态机,我可以通过text / xml文件在外部进行配置。

您对现有C ++状态机有什么建议,允许我从文件外部配置状态/事件?

我看了一下boost状态机,但它似乎缺乏从状态机文件生成类的能力,我不想手动创建100个类?

还有什么其他选择?

2 个答案:

答案 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的“实验”状态,到目前为止我还没有遇到任何问题。