To Be C++
shaker's Blog
生當(dāng)作人杰,死亦為鬼雄,至今思項(xiàng)羽,不肯過(guò)江東。
首頁(yè)
新隨筆
聯(lián)系
聚合
管理
隨筆-60 評(píng)論-111 文章-0 trackbacks-0
Boost的狀態(tài)機(jī)庫(kù)教程(1)
介紹
Boost狀態(tài)機(jī)庫(kù)一個(gè)應(yīng)用程序框架,你可以用它將UML狀態(tài)圖快速的轉(zhuǎn)換為可執(zhí)行的c++代碼,而不需要任何的代碼生成器。它支持幾乎所有的UML特征,可以直接了當(dāng)?shù)霓D(zhuǎn)換,并且轉(zhuǎn)換后的c++代碼就像對(duì)狀態(tài)機(jī)進(jìn)行一次文本描述一樣具體可讀性。
如何閱讀這個(gè)教程
這個(gè)教程是以線性閱讀的方式進(jìn)行的章節(jié)設(shè)計(jì)。如果你是第一次看這個(gè)教程的話,你可以從頭開(kāi)始讀,到你覺(jué)得了解的東西對(duì)你手頭的任務(wù)來(lái)說(shuō)已經(jīng)足夠時(shí)就停止。具體可以這樣:
* 如果你的任務(wù)是要實(shí)現(xiàn)一個(gè)小的、簡(jiǎn)單的,并且有很少幾個(gè)狀態(tài)的狀態(tài)機(jī),那么下面的“初級(jí)主題:秒表”里所講的就差不多夠你用的了。
* 如果你要做一個(gè)有很多狀態(tài)的大型狀態(tài)機(jī),你可以看一下“中級(jí)主題:數(shù)碼相機(jī)”,那里的講解可能對(duì)你有幫助。
* 最后,如果你是一個(gè)要?jiǎng)?chuàng)建異常復(fù)雜狀態(tài)機(jī)的用戶,或者是一個(gè)想要評(píng)估一個(gè)Boost狀態(tài)機(jī)的設(shè)計(jì)師的話,你就要看一下“高級(jí)主題”部分。并且,我還強(qiáng)烈建議你看一下Rationle里的Limitions部分。
Hello World!
我們將要從一個(gè)最簡(jiǎn)單程序開(kāi)始我們的第一步,狀態(tài)圖如下:
對(duì)于這個(gè)狀態(tài)圖,我們的實(shí)現(xiàn)代碼如下:
1
#include
<
boost
/
statechart
/
state_machine.hpp
>
2
#include
<
boost
/
statechart
/
simple_state.hpp
>
3
#include
<
iostream
>
4
5
namespace
sc
=
boost::statechart;
6
7
//
為了避免寫(xiě)public,下面聲明的類型全部為struct。
8
//
如果你不在乎的話可以把它們都改成class。
9
10
//
我們需要先聲明一下初始狀態(tài),這是因?yàn)槲覀円诙x狀態(tài)機(jī)時(shí)使用它
11
//
但又不得不在狀態(tài)機(jī)這后定義它。
12
13
struct
Greeting;
14
15
//
Boost.Statechart大量應(yīng)用模板模式。
16
//
派生類必須將自己做為基類模板的第一個(gè)參數(shù)。
17
//
18
//
狀態(tài)機(jī)必須要知道當(dāng)其初始化后進(jìn)行的第一個(gè)狀態(tài)。
19
//
這就是為什么Greeting要做為每二個(gè)模板參數(shù)。
20
//
(譯者注:也就是說(shuō)Greeting狀態(tài)是Machine狀態(tài)機(jī)初始化后進(jìn)入的第一個(gè)狀態(tài))
21
struct
Machine : sc::state_machine
<
Machine, Greeting
>
{}
;
22
23
//
對(duì)于每一個(gè)狀態(tài),我們需要為其指明:它屬于哪一個(gè)狀態(tài)機(jī),它位于狀態(tài)圖的哪個(gè)位置。
24
//
我們用simple_state<>的上下文參數(shù)就可以完成這些指定了。
25
//
對(duì)于我們目前的這個(gè)簡(jiǎn)單的狀態(tài)機(jī)來(lái)說(shuō),上下文就是狀態(tài)機(jī)(Machine)
26
//
所以,Machine必須要做為simple_state的第二個(gè)模塊參數(shù)。
27
//
(關(guān)于上下文參數(shù)的詳細(xì)解釋在下一個(gè)例子中有)
28
struct
Greeting : sc::simple_state
<
Greeting, Machine
>
29
{
30
//
一旦狀態(tài)機(jī)進(jìn)行一個(gè)狀態(tài)的時(shí)候,它就要?jiǎng)?chuàng)建一個(gè)相應(yīng)狀態(tài)類的對(duì)象(類實(shí)例)
31
//
只要狀態(tài)機(jī)保持在這個(gè)狀態(tài)下,這個(gè)對(duì)象就會(huì)一直存在。
32
//
最后,當(dāng)狀態(tài)機(jī)離開(kāi)這個(gè)狀態(tài)時(shí),對(duì)象被銷毀。
33
//
所以,一個(gè)狀態(tài)的進(jìn)入動(dòng)作就是這個(gè)狀態(tài)類的構(gòu)造器,而它的退出動(dòng)作則是它的析構(gòu)類。 Greeting() { std::cout << "Hello World!\n" ; }
//
進(jìn)入
34
~
Greeting()
{ std::cout
<<
"
Bye Bye World!\n
"
; }
//
退出
35
}
;
36
37
int
main()
38
{
39
Machine myMachine;
40
//
構(gòu)造完?duì)顟B(tài)機(jī)后,它并未開(kāi)始運(yùn)行。我們要通過(guò)調(diào)用它的initiate()來(lái)啟動(dòng)它。
41
//
同時(shí),它也將觸發(fā)它的初始狀態(tài)(Greeting)的構(gòu)造。
42
myMachine.initiate();
43
//
當(dāng)我們離開(kāi)main()函數(shù)時(shí),myMachine將被銷毀,這將導(dǎo)致它銷毀它內(nèi)部的所有活動(dòng)的狀態(tài)類。
44
//
(譯者注:為什么會(huì)說(shuō)所有?這是因?yàn)橐粋€(gè)狀態(tài)機(jī)可以同時(shí)
保持在多個(gè)狀態(tài)中,可以參考“高級(jí)主題”部分)
45
return
0
;
46
}
這個(gè)程序會(huì)顯示“
Hello World!”和“
Bye Bye World!
”,然后退出。
posted on 2010-08-16 14:42
shaker(太子)
閱讀(5731)
評(píng)論(0)
編輯
收藏
引用
所屬分類:
C++
只有注冊(cè)用戶
登錄
后才能發(fā)表評(píng)論。
【推薦】100%開(kāi)源!大型工業(yè)跨平臺(tái)軟件C++源碼提供,建模,組態(tài)!
相關(guān)文章:
Relocate SVN
又是一個(gè)APIHOOK
[zt] Windows APC機(jī)制
[zt]談?wù)剬?duì)APC的一點(diǎn)理解
NtProtectVirtualMemory
【轉(zhuǎn)帖】Windows網(wǎng)絡(luò)體系結(jié)構(gòu)總結(jié)
Pro OGRE 3D Programming 中文翻譯版本0.2.0
Boost的狀態(tài)機(jī)庫(kù)教程 補(bǔ)充
Boost的狀態(tài)機(jī)庫(kù)教程(3)
Boost的狀態(tài)機(jī)庫(kù)教程(2)
網(wǎng)站導(dǎo)航:
博客園
IT新聞
BlogJava
博問(wèn)
Chat2DB
管理
給我發(fā)QQ消息
我的微博
libghttp
win7sp1
<
2010年8月
>
日
一
二
三
四
五
六
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
留言簿
(25)
給我留言
查看公開(kāi)留言
查看私人留言
隨筆分類
(52)
C++(37)
Delphi(2)
Utility(10)
Windows Kernel(3)
隨筆檔案
(60)
2014年4月 (1)
2011年12月 (1)
2011年9月 (1)
2011年7月 (1)
2011年5月 (2)
2011年3月 (1)
2011年2月 (3)
2011年1月 (1)
2010年8月 (6)
2010年3月 (1)
2009年11月 (1)
2009年6月 (1)
2009年5月 (1)
2008年8月 (1)
2008年6月 (1)
2008年3月 (1)
2008年2月 (1)
2007年10月 (2)
2007年9月 (1)
2007年8月 (2)
2007年7月 (1)
2007年5月 (2)
2007年4月 (2)
2007年2月 (2)
2006年12月 (7)
2006年11月 (2)
2006年10月 (2)
2006年9月 (12)
精彩blog
#ant
boost源碼剖析
CppExplore
系統(tǒng)設(shè)計(jì)系列文章
Learning boost
飯中淹的避難所
懶人日志
笑笑小生的博客
沐楓小筑
微妙的平衡
有一些HGE的技巧
鏈接
C++博客
就是這里啦
Code Project
大名鼎鼎的網(wǎng)站 全e文
CSDN.net
感覺(jué)是個(gè)大雜燴 不專精 不過(guò)但凡國(guó)內(nèi)的程序員大多也會(huì)去那看看的
VC知識(shí)庫(kù)
VC資料網(wǎng)站 收集的還算多的 不過(guò)還需要向CodeProject學(xué)習(xí)
游戲外掛研究院
算是曾今國(guó)內(nèi)眾多外掛高手的根據(jù)地吧 不過(guò)人心散了... 難現(xiàn)往日輝煌
搜索
積分與排名
積分 - 137221
排名 - 188
最新評(píng)論
1.?re: [ZT]C++ Boost Thread 編程指南
謝謝你的分享。
--ALPg
2.?re: [工具]VSS2005 下載
@周超
用迅雷試試
--shaker
3.?re: [工具]VSS2005 下載
。。。
--。
4.?re: [工具]VSS2005 下載
gdfg
--fd
5.?re: [工具]VSS2005 下載
下不了啊。404錯(cuò)誤
--周超
閱讀排行榜
1.?[ZT]C++ Boost Thread 編程指南 (20534)
2.?[工具]VSS2005 下載(9321)
3.?C++ Builder 2007 破解文件(6740)
4.?NtProtectVirtualMemory(6609)
5.?[轉(zhuǎn)]RGB與YUV轉(zhuǎn)換(5974)
6.?Boost的狀態(tài)機(jī)庫(kù)教程(1) (5731)
7.?C++Builder2007 安裝辦法(4654)
8.?經(jīng)典的XP主題Luna Element全集(3753)
9.?BCGControlBar Library Professional Edition v9.56(3466)
10.?發(fā)一個(gè)mir2的內(nèi)掛代碼(3241)
評(píng)論排行榜
1.?write a simple os with asm&c(23)
2.?[工具]VSS2005 下載(13)
3.?BCGControlBar Library Professional Edition v9.56(10)
4.?Visual Assist X v10.3.1534 build 2006.09.02 cracked dll's by Av0id(8)
5.?傳奇2TMD(8)
6.?C++ Builder 2007 破解文件(7)
7.?發(fā)一個(gè)mir2的內(nèi)掛代碼(5)
8.?更新了下TMD!幾張截圖(5)
9.?MSDN的Bug!(3)
10.?2007年5月 Windows XP Pro SP2 最新正版驗(yàn)證破解文件(3)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 shaker(太子)
久久久受www免费人成
|
亚洲国产成人久久综合区
|
久久精品国产亚洲77777
|
久久综合九色综合97_久久久
|
97久久香蕉国产线看观看
|
久久精品国产影库免费看
|
性高朝久久久久久久久久
|
国产精品久久久久久吹潮
|
无码人妻少妇久久中文字幕
|
欧美亚洲色综久久精品国产
|
久久综合伊人77777
|
久久91精品久久91综合
|
久久热这里只有精品在线观看
|
国产成人精品久久亚洲高清不卡
|
亚洲精品乱码久久久久久蜜桃不卡
|
中文字幕无码久久精品青草
|
久久久久久人妻无码
|
国产精品成人久久久
|
精品久久综合1区2区3区激情
|
久久久久99精品成人片欧美
|
少妇熟女久久综合网色欲
|
99久久精品国产毛片
|
久久精品一区二区三区不卡
|
亚洲AV无码1区2区久久
|
99精品国产在热久久
|
97精品伊人久久久大香线蕉
|
久久人妻少妇嫩草AV蜜桃
|
久久免费国产精品一区二区
|
97久久精品无码一区二区
|
久久精品国产99久久久
|
久久精品黄AA片一区二区三区
|
精品久久久久成人码免费动漫
|
久久久受www免费人成
|
狠狠色综合久久久久尤物
|
日本精品久久久中文字幕
|
久久精品免费一区二区三区
|
久久99精品国产
|
国产成人精品久久一区二区三区av
|
99久久精品免费看国产一区二区三区
|
欧洲国产伦久久久久久久
|
无码任你躁久久久久久
|