Используя диаграмму состояния Boost, как я могу безоговорочно перейти в состояние? - PullRequest
4 голосов
/ 12 октября 2011

У меня есть состояние A, которое я хотел бы безоговорочно перейти в его следующее состояние B, как только конструктор A завершит работу. Возможно ли это?

Я попытался опубликовать событие из конструктора, который не работает, даже если он компилируется. Спасибо.

Редактировать: Вот что я пробовал до сих пор:

struct A : sc::simple_state< A, Active >
{
    public:
        typedef sc::custom_reaction< EventDoneA > reactions;
        A()
        {
            std::cout << "Inside of A()" << std::endl;
            post_event( EventDoneA() );
        }

        sc::result react( const EventDoneA & )
        {
            return transit< B >();
        }
};

Это приводит к следующей ошибке подтверждения во время выполнения:

Assertion failed: get_pointer( pContext_ ) != 0, file /includ
e/boost/statechart/simple_state.hpp, line 459

1 Ответ

3 голосов
/ 14 ноября 2011

Я обновил свой OP своим решением, вот оно, чтобы я мог закрыть вопрос.

Проблема в том, что вы не можете наследовать от simple_state, чтобы достичь желаемого перехода, вы должны наследовать отstate, что требует соответствующего изменения конструктора.

struct A : sc::state< A, Active >
{
    public:
        typedef sc::custom_reaction< EventDoneA > reactions;
        A( my_context ctx ) : my_base( ctx )
        {
            std::cout << "Inside of A()" << std::endl;
            post_event( EventDoneA() );
        }

        sc::result react( const EventDoneA & )
        {
            return transit< B >();
        }
};
...