To Be C++
shaker's Blog
生当作人杰,死亦为鬼雄,至今思项羽,不肯过江东。
首页
新随笔
联系
聚合
管理
随笔-60 评论-111 文章-0 trackbacks-0
Boost的状态机库教程(1)
介绍
Boost状态机库一个应用程序框架,你可以用它将UML状态图快速的转换为可执行的c++代码,而不需要任何的代码生成器。它支持几乎所有的UML特征,可以直接了当的转换,并且转换后的c++代码就像对状态机进行一次文本描述一样具体可读性。
如何阅读这个教程
这个教程是以线性阅读的方式进行的章节设计。如果你是第一次看这个教程的话,你可以从头开始读,到你觉得了解的东西对你手头的任务来说已经足够时就停止。具体可以这样:
* 如果你的任务是要实现一个小的、简单的,并且有很少几个状态的状态机,那么下面的“初级主题:秒表”里所讲的就差不多够你用的了。
* 如果你要做一个有很多状态的大型状态机,你可以看一下“中级主题:数码相机”,那里的讲解可能对你有帮助。
* 最后,如果你是一个要创建异常复杂状态机的用户,或者是一个想要评估一个Boost状态机的设计师的话,你就要看一下“高级主题”部分。并且,我还强烈建议你看一下Rationle里的Limitions部分。
Hello World!
我们将要从一个最简单程序开始我们的第一步,状态图如下:
对于这个状态图,我们的实现代码如下:
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
//
为了避免写public,下面声明的类型全部为struct。
8
//
如果你不在乎的话可以把它们都改成class。
9
10
//
我们需要先声明一下初始状态,这是因为我们要在定义状态机时使用它
11
//
但又不得不在状态机这后定义它。
12
13
struct
Greeting;
14
15
//
Boost.Statechart大量应用模板模式。
16
//
派生类必须将自己做为基类模板的第一个参数。
17
//
18
//
状态机必须要知道当其初始化后进行的第一个状态。
19
//
这就是为什么Greeting要做为每二个模板参数。
20
//
(译者注:也就是说Greeting状态是Machine状态机初始化后进入的第一个状态)
21
struct
Machine : sc::state_machine
<
Machine, Greeting
>
{}
;
22
23
//
对于每一个状态,我们需要为其指明:它属于哪一个状态机,它位于状态图的哪个位置。
24
//
我们用simple_state<>的上下文参数就可以完成这些指定了。
25
//
对于我们目前的这个简单的状态机来说,上下文就是状态机(Machine)
26
//
所以,Machine必须要做为simple_state的第二个模块参数。
27
//
(关于上下文参数的详细解释在下一个例子中有)
28
struct
Greeting : sc::simple_state
<
Greeting, Machine
>
29
{
30
//
一旦状态机进行一个状态的时候,它就要创建一个相应状态类的对象(类实例)
31
//
只要状态机保持在这个状态下,这个对象就会一直存在。
32
//
最后,当状态机离开这个状态时,对象被销毁。
33
//
所以,一个状态的进入动作就是这个状态类的构造器,而它的退出动作则是它的析构类。 Greeting() { std::cout << "Hello World!\n" ; }
//
进入
34
~
Greeting()
{ std::cout
<<
"
Bye Bye World!\n
"
; }
//
退出
35
}
;
36
37
int
main()
38
{
39
Machine myMachine;
40
//
构造完状态机后,它并未开始运行。我们要通过调用它的initiate()来启动它。
41
//
同时,它也将触发它的初始状态(Greeting)的构造。
42
myMachine.initiate();
43
//
当我们离开main()函数时,myMachine将被销毁,这将导致它销毁它内部的所有活动的状态类。
44
//
(译者注:为什么会说所有?这是因为一个状态机可以同时
保持在多个状态中,可以参考“高级主题”部分)
45
return
0
;
46
}
这个程序会显示“
Hello World!”和“
Bye Bye World!
”,然后退出。
posted on 2010-08-16 14:42
shaker(太子)
阅读(5625)
评论(0)
编辑
收藏
引用
所属分类:
C++
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
Relocate SVN
又是一个APIHOOK
[zt] Windows APC机制
[zt]谈谈对APC的一点理解
NtProtectVirtualMemory
【转帖】Windows网络体系结构总结
Pro OGRE 3D Programming 中文翻译版本0.2.0
Boost的状态机库教程 补充
Boost的状态机库教程(3)
Boost的状态机库教程(2)
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理
给我发QQ消息
我的微博
libghttp
win7sp1
<
2024年12月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
30
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)
给我留言
查看公开留言
查看私人留言
随笔分类
(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
系统设计系列文章
Learning boost
饭中淹的避难所
懒人日志
笑笑小生的博客
沐枫小筑
微妙的平衡
有一些HGE的技巧
链接
C++博客
就是这里啦
Code Project
大名鼎鼎的网站 全e文
CSDN.net
感觉是个大杂烩 不专精 不过但凡国内的程序员大多也会去那看看的
VC知识库
VC资料网站 收集的还算多的 不过还需要向CodeProject学习
游戏外挂研究院
算是曾今国内众多外挂高手的根据地吧 不过人心散了... 难现往日辉煌
搜索
积分与排名
积分 - 136071
排名 - 186
最新评论
1. re: [ZT]C++ Boost Thread 编程指南
谢谢你的分享。
--ALPg
2. re: [工具]VSS2005 下载
@周超
用迅雷试试
--shaker
3. re: [工具]VSS2005 下载
。。。
--。
4. re: [工具]VSS2005 下载
gdfg
--fd
5. re: [工具]VSS2005 下载
下不了啊。404错误
--周超
阅读排行榜
1. [ZT]C++ Boost Thread 编程指南 (20517)
2. [工具]VSS2005 下载(9301)
3. C++ Builder 2007 破解文件(6718)
4. NtProtectVirtualMemory(6516)
5. [转]RGB与YUV转换(5946)
6. Boost的状态机库教程(1) (5625)
7. C++Builder2007 安装办法(4608)
8. 经典的XP主题Luna Element全集(3735)
9. BCGControlBar Library Professional Edition v9.56(3448)
10. 发一个mir2的内挂代码(3224)
评论排行榜
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. 发一个mir2的内挂代码(5)
8. 更新了下TMD!几张截图(5)
9. MSDN的Bug!(3)
10. 2007年5月 Windows XP Pro SP2 最新正版验证破解文件(3)