介绍
Boost状态机库一个应用程序框架,你可以用它将UML状态图快速的转换为可执行的c++代码,而不需要任何的代码生成器。它支持几乎所有的UML特征,可以直接了当的转换,并且转换后的c++代码就像对状态机进行一次文本描述一样具体可读性。 如何阅读这个教程
这个教程是以线性阅读的方式进行的章节设计。如果你是第一次看这个教程的话,你可以从头开始读,到你觉得了解的东西对你手头的任务来说已经足够时就停止。具体可以这样:
* 如果你的任务是要实现一个小的、简单的,并且有很少几个状态的状态机,那么下面的“初级主题:秒表”里所讲的就差不多够你用的了。
* 如果你要做一个有很多状态的大型状态机,你可以看一下“中级主题:数码相机”,那里的讲解可能对你有帮助。
* 最后,如果你是一个要创建异常复杂状态机的用户,或者是一个想要评估一个Boost状态机的设计师的话,你就要看一下“高级主题”部分。并且,我还强烈建议你看一下Rationle里的Limitions部分。 Hello World!
我们将要从一个最简单程序开始我们的第一步,状态图如下: 对于这个状态图,我们的实现代码如下:
#include <boost/statechart/state_machine.hpp>
#include <boost/statechart/simple_state.hpp>
#include <iostream> namespace sc = boost::statechart; // 为了避免写public,下面声明的类型全部为struct。
// 如果你不在乎的话可以把它们都改成class。 // 我们需要先声明一下初始状态,这是因为我们要在定义状态机时使用它
// 但又不得不在状态机这后定义它。 struct Greeting; // Boost.Statechart大量应用模板模式。
// 派生类必须将自己做为基类模板的第一个参数。
//
// 状态机必须要知道当其初始化后进行的第一个状态。
// 这就是为什么Greeting要做为每二个模板参数。
// (译者注:也就是说Greeting状态是Machine状态机初始化后进入的第一个状态)
struct Machine : sc::state_machine< Machine, Greeting > {}; // 对于每一个状态,我们需要为其指明:它属于哪一个状态机,它位于状态图的哪个位置。
// 我们用simple_state<>的上下文参数就可以完成这些指定了。
// 对于我们目前的这个简单的状态机来说,上下文就是状态机(Machine)
// 所以,Machine必须要做为simple_state的第二个模块参数。
// (关于上下文参数的详细解释在下一个例子中有)
struct Greeting : sc::simple_state< Greeting, Machine >
{
// 一旦状态机进行一个状态的时候,它就要创建一个相应状态类的对象(类实例)
// 只要状态机保持在这个状态下,这个对象就会一直存在。
// 最后,当状态机离开这个状态时,对象被销毁。
// 所以,一个状态的进入动作就是这个状态类的构造器,而它的退出动作则是它的析构类。 Greeting() { std::cout << "Hello World!/n" ; } // 进入
~Greeting() { std::cout << "Bye Bye World!/n" ; } // 退出
}; int main()
{
Machine myMachine;
// 构造完状态机后,它并未开始运行。我们要通过调用它的initiate()来启动它。
// 同时,它也将触发它的初始状态(Greeting)的构造。
myMachine.initiate();
// 当我们离开main()函数时,myMachine将被销毁,这将导致它销毁它内部的所有活动的状态类。
// (译者注:为什么会说所有?这是因为一个状态机可以同时 保持在多个状态中,可以参考“高级主题”部分)
return ;
}
这个程序会显示“Hello World!”和“ Bye Bye World! ”,然后退出

http://blog.csdn.net/karl_max/article/details/2879088上面有学习boost状态机三部曲

Boost的状态机库教程(1)的更多相关文章

  1. .NET中的状态机库Stateless

    标题:.NET中的状态机库Stateless 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/10674018.html 介绍 什么是状态机和状态模式 ...

  2. 【深入浅出 Yarn 架构与实现】2-4 Yarn 基础库 - 状态机库

    当一个服务拥有太多处理逻辑时,会导致代码结构异常的混乱,很难分辨一段逻辑是在哪个阶段发挥作用的. 这时就可以引入状态机模型,帮助代码结构变得清晰. 一.状态机库概述 一)简介 状态机由一组状态组成: ...

  3. boost解析XML方法教程

    boost库在解析XML时具有良好的性能,可操作性也很强下地址有个简单的说明 http://blog.csdn.net/luopeiyuan1990/article/details/9445691 一 ...

  4. JMeter压力测试及服务器状态监控教程

    转载自:https://blog.csdn.net/cbzcbzcbzcbz/article/details/78023327 前段时间公司需要对服务器进行压力测试,包括登录前的页面和登录后的页面,主 ...

  5. Boost C++ 库 中文教程(全)

    Boost C++ 库 目录 第 1 章 简介 第 2 章 智能指针 第 3 章 函数对象 第 4 章 事件处理 第 5 章 字符串处理 第 6 章 多线程 第 7 章 异步输入输出 第 8 章 进程 ...

  6. The Boost C++ Libraries中文教程

    http://zh.highscore.de/cpp/boost/

  7. boost库的安装,使用,介绍,库分类

    1)首先去官网下载boost源码安装包:http://www.boost.org/ 选择下载对应的boost源码包.本次下载使用的是 boost_1_60_0.tar.gz (2)解压文件:tar - ...

  8. boost库的使用

    我的经验:在强调运行效率的场合:shared_ptr/weak_ptr很好用,尤其是weak_ptr这个能够判断一个对象的生命周期的玩意,可以简化和扩展很多设计.unordered系列的容器也很不错. ...

  9. Boost学习-Linuxidc上的很好的学习资料

    来自 http://www.linuxidc.com/Linux/2011-07/39215.htm,拷贝第一页如下 Boost学习系列 简介及基本用法 [日期:2011-07-25] 来源:Linu ...

随机推荐

  1. 【转】【Http】Http各种错误的意思

    IIS状态代码的含义 当用户试图通过HTTP或文件传输协议(FTP)访问一台正在运行Internet信息服务(IIS)的服务器上的内容时,IIS返回一个表示该请求的状态的数字代码.该状态代码记录在II ...

  2. tftp从linux下载文件

    1,背景: 当我们ssh到一台linux上时候,从linux上下载一些文件,方案如下: 1.1通过sftp:通过win7 ftp客户端连接到linux去下载文件. 1.2通过tftp 2,问题 有些l ...

  3. C语言 百炼成钢16

    //题目46:海滩上有一堆桃子,五只猴子来分.第一只猴子把这堆桃子凭据分为五份,多了一个,这只 //猴子把多的一个扔入海中,拿走了一份.第二只猴子把剩下的桃子又平均分成五份,又多了 //一个,它同样把 ...

  4. CAS 单点登录流程

    经验:在网上学东西不要指望一篇文章就能让你明白——我在网上学CAS流程,看了五六篇博文,其中三篇是觉得作者表达能力不行,或者作者自己就没明白怎么回事就出来写东西,看到一半就跳过了,剩下两篇每篇看了两遍 ...

  5. 浅谈VC++中预编译的头文件放那里的问题分析

    用C++写程序,肯定要用预编译头文件,就是那个stdafx.h.不过我一直以为只要在.cpp文件中包含stdafx.h 就使用了预编译头文件,其实不对.在VC++中,预编译头文件是指放到stdafx. ...

  6. memcached缓存失效时的高并发访问问题解决

    memcached一般用于在访问一些性能相对低下的数据接口时(如数据库),为了保证这些数据接口的稳定性,加上memcached以减少访问次数,保证这些数据接口的健壮性.一般memcached的数据都是 ...

  7. Linux常用的基本命令

    man命令:查看帮助信息                       格式:man  需要查看的命令 date命令:显示时间                            格式:# date ...

  8. 发布HTML5 2D游戏引擎YEngine2D

    关于YEngine2D YEngine2D是一个开源的.采用HTML5技术和Javscript语言创建的2D游戏框架,用来构建web二维游戏. GitHub地址 最新版本 v0.1.2 浏览器支持 C ...

  9. windows2003 单网卡 搭建vpn ,windows 2008 R2 类似吧。网上转的,自己加了点经验总结

    先说说可能的坑,也就是我自己搭建的时候碰到的问题. 其实搭建起来很简单,我不知道我总结的对还是不对,但是按下面这样操作做绝对能搭好!因为我就是按这样搭起来的,但是我发现,好像pptp已经被墙了,我也不 ...

  10. Common Lisp编译程序的小技巧

    这几天开始玩Common Lisp,遇上了一个有意思的问题,CL一般是解释运行,也有实现可以编译生成字节码(fas文件).我正在用的两种CL实现是SBCL和CLISP,前者是我从<实用Commo ...