
Hello everyone, I am trying to use Boost.MSM with the eUML front-end and I must say: That is a pretty cool thing! :-) However, I stumbled across some points that raised several questions, which I hoped someone of you could answer. One of these points is the usage of the "kleene" event (with eUML). The questions that came to mind are the following: 1. Is there a way to access an attribute of an (original) event if the transition-table uses the "kleene" event? 2. If there is a way, can I access it directly from the guard or actions-list in the transition-table? 3. If there is not a way, is it planned to be implemented (if possible) and when? For better understanding I insert here a simple example which explains what I am trying to do: In my special case, all my events have an attribute "EventNo" which is a unique number for each event(-type). Now, I need a transition for the events with "EventNo" greater than a special number (e.g. 7). So I thought, I could do something like this: // The attribute: BOOST_MSM_EUML_DECLARE_ATTRIBUTE(int, EventNo) BOOST_MSM_EUML_ATTRIBUTES((attributes_ << EventNo), EventNoAttr) // All events that contain this attribute: BOOST_MSM_EUML_EVENT_WITH_ATTRIBUTES(event1, EventNoAttr) BOOST_MSM_EUML_EVENT_WITH_ATTRIBUTES(event2, EventNoAttr) /* ... */ BOOST_MSM_EUML_EVENT_WITH_ATTRIBUTES(eventN, EventNoAttr) // Entry-action of FSM which initializes these event-numbers: BOOST_MSM_EUML_ACTION(init_all_events) { template <class Evt, class Fsm, class State> void operator()(Evt const&, Fsm&, State&) { event1.get_attribute(EventNo) = 1; event2.get_attribute(EventNo) = 2; /* ... */ eventN.get_attribute(EventNo) = N; }; } // Some states: BOOST_MSM_EUML_STATE((), State1) BOOST_MSM_EUML_STATE((), State2) // The transition table which contains all the logic: BOOST_MSM_EUML_TRANSITION_TABLE(( State1 + kleene [event_(EventNo) > Int_<7>()] // <-- Not working! == State2, State1 + event1 == State3 /* event2 to event7 are ignored! */ ), stt) // The FSM front-end and back-end: BOOST_MSM_EUML_DECLARE_STATE_MACHINE(( stt, init_ << init_all_events ), FsmFrontend; typedef msm::back::state_machine<FsmFrontend> Fsm; However, the expression "event_(EventNo)" in the transition-guard fails to compile with the following error: error: no match for call to ‘(boost::msm::front::euml::GetEvent_<EventNo_>) (const boost::msm::front::euml::kleene_&, boost::msm::back::state_machine< boost::msm::front::euml::func_state_machine<FsmFrontendtag, ...’ I read in the documentation of the Functor front-end that I should use boost::any::type() to access the original event in transition actions, but I do not really know how to go on with it. I am also not sure if this applies to the eUML front-end at all (especially in the transition-guard). I hope someone can help me and answer these questions!? Thanks in advance, Deniz Bahadir