2015-09-10 84 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雙由於狀態實例實現只對活爲沿着作爲狀態是機器的當前狀態。

因此,您希望記錄,註冊,登錄狀態更改(進入或退出)的所有內容都可以在這些特殊功能中執行。