2010-03-23 167 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的「實驗性」的地位,我沒有任何問題,它至今。