Dear statecharters,
I would like to request help with a problem building a statemachine from states that I
derive from simple_state. Here is minimal code that defines two states StateA and StateB
and an event cycling between these two:
#include <boost/statechart/state_machine.hpp>
#include <boost/statechart/simple_state.hpp>
#include <boost/statechart/event.hpp>
#include <boost/statechart/transition.hpp>
namespace sc = boost::statechart;
using namespace std;
class StateA;
struct StateMachine : sc::state_machine< StateMachine, StateA >
{
void unconsumed_event( const sc::event_base & evt ) { cout << "unconsumed!" << endl; }
};
class Event : public sc::event< Event > {};
struct StateA : sc::simple_state< StateA, StateMachine >
{
typedef sc::transition< Event, StateB > reactions;
};
struct StateB : sc::simple_state< StateB, StateMachine >
{
typedef sc::transition< Event, StateA > reactions;
};
-----------------
This works fine as expected with process_event( Event() ).
However, I would like to derive the states of my statechart from a class like this:
template<class context>
struct State : sc::simple_state< State<context>, context >
{
// Some application-specific things
};
struct StateA : State< StateMachine >
{
typedef sc::transition< Event, StateB > reactions;
};
struct StateB : State< StateMachine >
{
typedef sc::transition< Event, StateA > reactions;
};
-----------------
Now, calling process_event( Event() ) does not do anything, except turning the event up
at the StateMachine::unconsumed_event() method.
I am aware of this one:
http://www.boost.org/doc/libs/1_35_0/libs/statechart/doc/faq.html#TemplatedStates
but I'm not sure whether this applies in any way to my case, as I don't have any compiler
errors.
May I be violating some prerequisites here?
Thank you for any help you can provide,
Stefan.