Boost logo

Boost :

From: Alexander Nasonov (alnsn_at_[hidden])
Date: 2004-09-12 11:39:01

After playing with my overloads library and trying to apply it to FSM
I realized that some metaprogramming can be replaced with natural
overload resolution rules. After realizing it, I come to conclusion that
simple FSM can be implemented as a set of call operators and a list of
states. Each call operator represents a transition and follows this
  NewState operator()(State,Event) const;

Transition functions are generated in process_event function on first
call (in a constructor of static variable, for example). Each function
extracts current state from StatesAsVariant (boost::variant of all

template<class StatesAsVariant, class State, class Event>
void transition(FSM& fsm, StatesAsVariant states, Event event)
    states = fsm( get<State>(states), event); // select best transition
                                              // according to overload
                                              // resolution rules

The only metaprogramming algorithm is for_each<States> to initialize
transition table for the event.


Alexander Nasonov

Boost list run by bdawes at, gregod at, cpdaniel at, john at