// 表驱动的自动状态机(FSM)
// VC2008
#include "stdafx.h"
#include <map>
// 状态
enum enState
{
enState_Open,
enState_Close,
// 数量
enState_Num
};
// 输入事件
enum enEvent
{
enEvent_Open,
enEvent_Close,
// 数量
enEvent_Num
};
// 状态转换表
struct FSM_Transition
{
enState m_curState;
enEvent m_Event;
enState m_NextState;
};
// 状态机
class FSM
{
public:
// 初始状态
FSM(enState s0) : m_curState(s0) {};
// 设置状态转换表
void ClearTrans() { m_TransTable.clear(); };
void AddTrans(const FSM_Transition& trans)
{
TransTableKey key = std::make_pair(trans.m_curState, trans.m_Event);
TransTable::iterator it_find = m_TransTable.find(key);
if(it_find != m_TransTable.end())
&

本文展示了如何使用C++实现一个基于状态转换表的自动状态机(FSM)。通过枚举定义了状态和事件,用结构体表示状态转换,并在`FSM`类中处理状态变化。状态机的`HandleEvent`方法根据当前状态和输入事件进行状态切换,同时提供了添加状态转换、检查终止状态和触发状态改变事件的功能。
最低0.47元/天 解锁文章
1315

被折叠的 条评论
为什么被折叠?



