1

Boost Statechart の状態変化に登録する簡単な方法はありますか?

デジタル カメラの例で、アプリケーションに GUI を追加するとします。状態を照会する以外に、状態間の遷移について通知される可能性はありますか?

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

1 に答える 1

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.statechartます。これは、状態インスタンスは、状態がマシンの現在の状態である間のみ有効であるためです。onEntryonExitconstructordestructor

したがって、記録、登録、状態変化 (入口または出口) のログ記録はすべて、これらの特別な関数内で行うことができます。

于 2015-09-10T20:13:29.230 に答える