一个简单的有限状态机如图所示:
状态机几个要素: 状态state、事件event、动作action。这个状态机有两个状态,State1状态,和结束状态, 在Event1发生时会触发action(或者默认没有action),从而状态发生迁移。
boost的状态机库(Boost.MetaStateMachine )分为 back-end 和 front-end; 根据 front-end 的不同有三种实现,而 back-end 只有一种实现。
basic front-end
function front-end
eUML front-end
basic front-end 和 funciton front-end 都是通过创建类,继承类,定义成员变量来实现; 而 eUML front-end 是通过重用UML状态机,利用一些c++宏来实现的,感觉比较代码清晰简洁(见链接)
下列代码利用 function front-end 来实现上述状态机:
#include
#include
#include
#include
namespace {
namespace msm = boost::msm;
namespace msmf = boost::msm::front;
namespace