码迷,mamicode.com
首页 > 其他好文 > 详细

有限状态机,boost::msm

时间:2015-08-04 11:18:38      阅读:975      评论:0      收藏:0      [点我收藏+]

标签:

一个简单的有限状态机如图所示:
技术分享
这个状态机有两个,State1状态,和结束状态。
下列代码可以描述这个状态机:

#include <iostream>
#include <boost/msm/back/state_machine.hpp>

#include <boost/msm/front/state_machine_def.hpp>
#include <boost/msm/front/functor_row.hpp>

namespace {
    namespace msm = boost::msm;
    namespace msmf = boost::msm::front;
    namespace mpl = boost::mpl;

    // ----- Events
    struct Event1 {};

    // ----- State machine
    struct Sm1_:msmf::state_machine_def<Sm1_>
    {
        // States
        struct State1:msmf::state<> 
        {
            // Entry action
            template <class Event,class Fsm>
            void on_entry(Event const&, Fsm&) const {
                std::cout << "State1::on_entry()" << std::endl;
            }
            // Exit action
            template <class Event,class Fsm>
            void on_exit(Event const&, Fsm&) const {
                std::cout << "State1::on_exit()" << std::endl;
            }
        };
        struct End:msmf::terminate_state<> {};

        // Set initial state
        typedef State1 initial_state;

        // Transition table
        struct transition_table:mpl::vector<
            //          Start   Event   Next    Action      Guard
            msmf::Row < State1, Event1, End,    msmf::none, msmf::none >
        > {};
    };

    // Pick a back-end
    typedef msm::back::state_machine<Sm1_> Sm1;

    void test()
    {        
        Sm1 sm1;
        sm1.start(); 
        std::cout << "> Send Event1" << std::endl;
        sm1.process_event(Event1());
    }
}

int main()
{
    test();
    return 0;
}
// Output:
//
// State1::on_entry()
// > Send Event1
// State1::on_exit()

Sm1_ 对象表示这个状态机. 在 Sm1_状态机中有两个state,分别为:State1和End. 初始伪状态通过如下语句定义:

 // Set initial state
 typedef State1 initial_state;

typedef xxx initial_state 表示状态机Sm1_从状态State1开始。

尊重原作,原文链接,mark备用

有限状态机,boost::msm

标签:

原文地址:http://blog.csdn.net/gw569453350game/article/details/47272833

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!