我正在开发一个基于网络的服务器,它可能有100个状态和动作/事件。到目前为止,我使用简单的switch语句进行管理,但现在感觉需要一个状态机,我可以通过text/xml文件在外部进行配置。基于增强状态机生成类
你对现有的C++状态机有什么建议,允许我从文件外部配置状态/事件?
我看着boost状态机,但它似乎缺乏从状态机文件生成类的能力,我不想手动创建100个类。
还有什么其他选择?
我正在开发一个基于网络的服务器,它可能有100个状态和动作/事件。到目前为止,我使用简单的switch语句进行管理,但现在感觉需要一个状态机,我可以通过text/xml文件在外部进行配置。基于增强状态机生成类
你对现有的C++状态机有什么建议,允许我从文件外部配置状态/事件?
我看着boost状态机,但它似乎缺乏从状态机文件生成类的能力,我不想手动创建100个类。
还有什么其他选择?
如果你想成为灵活的,你应该看看Qt的状态机 http://doc.qt.nokia.com/4.6/statemachine-api.html
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状态机似乎很有趣,但它有一个商业许可证。 – rjoshi 2010-09-26 01:40:13
他们也有开源许可证。无论如何,我不明白为什么有些人将商业执照视为一个问题。 – 2010-12-26 07:42:48