2015-09-10 65 views
1

在Boost状态图中注册状态变化是否有一种直接的方法?关于Boost状态图状态变化的通知

对于Digital Camera示例,假设我决定将GUI添加到应用程序。除了查询州之外,是否有可能通知州之间的转换?

if(0 != state_cast<const State1 *>()) 
{ 
    context<OuterCotext>().Notify(1); 
} 
else if(0 != state_cast<const State2 *>()) 
{ 
    context<OuterCotext>().Notify(2); 
} 

回答

1

最简单的方法来知道你已经改变了状态,你进入先前状态的析构函数,然后将新状态的构造。

#include <boost/statechart/state_machine.hpp> 
#include <boost/statechart/simple_state.hpp> 
#include <iostream> 

namespace sc = boost::statechart; 

struct Greeting; 
struct Machine : sc::state_machine< Machine, S1> {}; 

struct S1 : sc::simple_state<S1, Machine> 
{ 
    S1() 
    { // entry 
     std::cout << "Enter S1\n"; 
    } 
    ~S1() 
    { // exit 
     std::cout << "Exit S1\n"; 
    } 
}; 

int main() 
{ 
    Machine myMachine; 
    myMachine.initiate(); 

    return 0; 
} 

Demo

boost.statechartonEntry/onExit动作由constructor /destructor双由于状态实例实现只对活为沿着作为状态是机器的当前状态。

因此,您希望记录,注册,登录状态更改(进入或退出)的所有内容都可以在这些特殊功能中执行。