|
Boost Users : |
From: Stefan Steuerwald (salsasepp_at_[hidden])
Date: 2008-09-01 10:38:28
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.
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net