#include <boost/statechart/transition.hpp>

#include <boost/statechart/event.hpp>

#include <boost/statechart/state_machine.hpp>

#include <boost/statechart/simple_state.hpp>

#include <boost/statechart/custom_reaction.hpp>

#include <iostream>

namespace sc = boost::statechart;

struct lostMoney : sc::event<lostMoney> {};

struct gotMoney : sc::event<gotMoney> {};

struct HappyState;

struct SadState;

struct PersonSM : sc::state_machine<PersonSM, HappyState> {};

struct HappyState : sc::simple_state<HappyState, PersonSM>

{

   HappyState() { std::cout << "In Happy State..." << std::endl; }

   typedef sc::transition<lostMoney, SadState> reactions;

   ~HappyState() { std::cout << "In Hadppy State DESTRUCTION ..." << std::endl; }

};

struct SadState : sc::simple_state<SadState, PersonSM>

{

   SadState() { std::cout << "In Sad State..." << std::endl; }

   typedef sc::transition<gotMoney, HappyState> reactions;

   ~SadState() { std::cout << "In Sad State DESTRUCTION ..." << std::endl; }

};

int main()

{

   PersonSM sm;

   sm.initiate();

   sm.process_event(lostMoney());

   sm.process_event(gotMoney());

}

输出结果:

In Happy State...    //因为使用Happy State去初始化而打印

In Hadppy State DESTRUCTION ... //中间收到event,该状态消亡打印

In Sad State...   //初始化后,状态为Happy State,因为sm.process_event(lostMoney());事件驱动,在Happy State状态收lostMo                          //ney,而构造Sad State打印

In Sad State DESTRUCTION ... //中间收到event 该状态消亡打印

In Happy State...      //在Sad State 收到sm.process_event(gotMoney());驱动,构造Happy State而打印

In Hadppy State DESTRUCTION ...//程序结束打印


#include <boost/statechart/transition.hpp>

#include <boost/statechart/event.hpp>

#include <boost/statechart/state_machine.hpp>

#include <boost/statechart/simple_state.hpp>

#include <boost/statechart/custom_reaction.hpp>

#include <iostream>

struct lostMoney : boost::statechart::event<lostMoney> {};

struct gotMoney : boost::statechart::event<gotMoney> {};

struct HappyState;

struct SadState;

struct MoreHappyState;

struct PersonSM : boost::statechart::state_machine<PersonSM, HappyState> {};

struct HappyState : boost::statechart::simple_state<HappyState, PersonSM>

{

   HappyState() { std::cout << "In Happy State..." << std::endl; }

   typedef boost::mpl::list<boost::statechart::transition<lostMoney, SadState>,

                            boost::statechart::transition<gotMoney, MoreHappyState>> reactions; //两种状态候选

   ~HappyState() { std::cout << "In Hadppy State DESTRUCTION ..." << std::endl; }

};

struct MoreHappyState : boost::statechart::simple_state<MoreHappyState, PersonSM>

{

   MoreHappyState() { std::cout << "In More Happy State..." << std::endl; }

   ~MoreHappyState() { std::cout << "In More Happy State DESTRUCTION ..." << std::endl; }

};

struct SadState : boost::statechart::simple_state<SadState, PersonSM>

{

   SadState() { std::cout << "In Sad State..." << std::endl; }

   typedef sc::transition<gotMoney, HappyState> reactions;

   ~SadState() { std::cout << "In Sad State DESTRUCTION ..." << std::endl; }

};

int main()

{

   PersonSM sm;

   sm.initiate();

   sm.process_event(lostMoney());

   sm.process_event(gotMoney());

   sm.process_event(gotMoney());

}

打印记录:


In Happy State...

In Hadppy State DESTRUCTION ...
In Sad State...
In Sad State DESTRUCTION ...
In Happy State...
In Hadppy State DESTRUCTION ...
In More Happy State...
In More Happy State DESTRUCTION ...

#include <boost/statechart/transition.hpp>

#include <boost/statechart/event.hpp>

#include <boost/statechart/state_machine.hpp>

#include <boost/statechart/simple_state.hpp>

#include <boost/statechart/custom_reaction.hpp>

#include <iostream>

struct lostMoney : sc::event<lostMoney> {};

struct gotMoney : sc::event<gotMoney> {};

struct HappyState;

struct SadState;

struct MoreHappyState;

struct PersonSM : boost::statechart::state_machine<PersonSM, HappyState>

{

};

struct HappyState : boost::statechart::simple_state<HappyState, PersonSM>

{

   HappyState() { std::cout << "In Happy State..." << std::endl; }

   typedef boost::statechart::custom_reaction<lostMoney> reactions;

   sc::result react(const lostMoney &lm)

   {

       std::cout << "I receive lost money event" << std::endl;

       return transit<SadState>();

   }

   ~HappyState() { std::cout << "In Hadppy State DESTRUCTION ..." << std::endl; }

};

struct MoreHappyState : boost::statechart::simple_state<MoreHappyState, PersonSM>

{

   MoreHappyState() { std::cout << "In More Happy State..." << std::endl; }

   ~MoreHappyState() { std::cout << "In More Happy State DESTRUCTION ..." << std::endl; }

};

struct SadState : boost::statechart::simple_state<SadState, PersonSM>

{

   SadState() { std::cout << "In Sad State..." << std::endl; }

   typedef boost::statechart::transition<gotMoney, HappyState> reactions;

   ~SadState() { std::cout << "In Sad State DESTRUCTION ..." << std::endl; }

};

int main()

{

   PersonSM sm;

   sm.initiate();

   sm.process_event(lostMoney());

}

结果打印:

In Happy State...      //状态机初始化打印
I receive lost money event //自定义的动作执行
In Hadppy State DESTRUCTION ...//happystate析构
In Sad State...//自定义的动作而构造
In Sad State DESTRUCTION ...程序结束



​https://www.cnblogs.com/sunbines/p/15084406.html​