C++ 有限状态机

用一个类定义事件和状态
文件:GlobalAutoDcl.h
Const int NbMaxAction =10;
Const int NbMaxState =5;
Const int NbMaxEvent =6;
Class GlobalAutoDcl{
public:
typedef enum {
event0 = 0;
event1 =1;
.......
}
typedef enum {
state0  = 0;
state1   =1;
.......
}
}
用一个抽象类定义一些数组,Action等:
文件: GlobalAuto.h
class GlobalResetAuto{
public:
protected:
//定义action的函数指针类型
typedef GlobalAutoDcl::StateForGlobalReset_t 
(GlobalAuto::*fPtr) (Signal *);
//定义一个Action的表
static fPtr ActionTable[NbMaxAction];
// 定义一个state/event的二维数组
static unsigned char Automaton[NbMaxState ][NbMaxEvent];
//二维数组的值就是Action,对应的state,event
// 定义虚函数,也就是Action函数
// 注意函数名字定义,由state和event组成,表示这个action是在此state下收到此event
virtual GlobalAutoDcl::State_t  state1_event2(Signal *msg) =0;
virtual GlobalAutoDcl::State_t  state3_event5(Signal *msg) =0;
// 此类中通常还包括如下方法定义
//  1.  返回当前state
//   2. 把当前state和event转换成字符串
//   3. ActionTable的初始化调用函数
//    4. 初始化Action数组的函数(也可以不放这里)
}
在globalauto.h文件中方法的具体实现
文件: globalauto.cpp
// 上面的state/event数组可以放在这里初始化
// Action也可以放在这里初始化
// 通常还会增加debug功能,记录过去发生的event
// 一个接收input signal的函数, 传进来的event应该包含event, 而state是本地有的
// 然后调用action中的函数指针,更改新state
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值