28 Şubat 2018 Çarşamba

msm state_machine Sınıfı

Giriş
Şu satırı dahil ederiz.
#include <boost/msm/back/state_machine.hpp>
Constructor
Template'ın ilk parametresi kendi state_machine_def sınıfından kalıtan sınıfımdır.
Örnek
msm::back::state_machine<my_fsm> my;
Örnek
Şöyle yaparız.
struct FSMDef : boost::msm::front::state_machine_def<FSMDef> {
  ...
}

using FSM = boost::msm::back::state_machine<FSMDef>;
FSM fsm;
Örnek
Şöyle yaparız.
namespace {

  class Shelf_Hooking;

  typedef msmb::state_machine<Shelf_Hooking, msmb::mpl_graph_fsm_check> SM_;

  struct Event {};

  class Shelf_Hooking : public msmf::state_machine_def<Shelf_Hooking> {
    ...

  }; /* End of State Machine class */

  /***************************************************************/
  /* Back-end */
  class state_machine_impl {
    std::unique_ptr<SM_> state_machine;

    public:
      state_machine_impl() : state_machine(new SM_()) {}

      ~state_machine_impl() {}

      void runSM() {
        state_machine->start();
        state_machine->process_event(Event());
      } /* End of runSM() */

  }; /* End of class state_machine_impl */

} /* End of namespace */

int main() {
  std::unique_ptr<state_machine_impl> Sm_ = std::unique_ptr<state_machine_impl>
    (new state_machine_impl());

  Sm_->runSM();
}
process_event metodu
Elimizde şöyle event'ler olsun.
struct Event1 {};
struct Event2 {};
Şöyle yaparız.
my.process_event(Event1());
start metodu
İlk state'e giriş yapar. process_event() metodundan önce çağrılır. Şöyle yaparız
my.start(); 

Hiç yorum yok:

Yorum Gönder