2010-03-23 56 views
0

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

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

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

还有什么其他选择?

回答

1

如果你想成为灵活的,你应该看看Qt的状态机 http://doc.qt.nokia.com/4.6/statemachine-api.html

+0

QT状态机似乎很有趣,但它有一个商业许可证。 – rjoshi 2010-09-26 01:40:13

+0

他们也有开源许可证。无论如何,我不明白为什么有些人将商业执照视为一个问题。 – 2010-12-26 07:42:48

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的“实验性”的地位,我没有任何问题,它至今。