Using Boost statechart, how can I transition to a state unconditionally?
-
09-02-2021 - |
Question
I have a state A
that I would like to transition to its next state B
unconditionally, once the constructor of A
has completed. Is this possible?
I tried posting an event from the constructor, which does not work, even though it compiles. Thanks.
Edit: Here is what I've tried so far:
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 >();
}
};
This yields the following runtime assertion failure:
Assertion failed: get_pointer( pContext_ ) != 0, file /includ
e/boost/statechart/simple_state.hpp, line 459
Solution
I've updated my OP with my solution, here it is so I can close the question.
The problem is that you cannot inherit from simple_state
to achieve the desired transition, you must inherit from state
, which then requires that you modify the constructor accordingly.
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 >();
}
};
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow