I'm fairly sure this is a template question, since I can't seem to solve it any other way - but non-template solutions are also welcome.
A Finite State Machine has a number of program States and each state can react to a number of Events.
So, I want to define classes for Event, State and FSM. FSM has a collection (probably vector, might be linked list if STL gives problems in an embedded system) of States, and State has a collection of Events.
Each state and event have a unique Id and a name string for debugging porpoises.
To be awkward, I don't want the Ids to be integers, but elements of an enum. Each FSM has different enums for its states & events.
How best to code this? Can you give an example with two simple FSMs, or one FSm with two states, each with two events?
For example, if I have
enum myEvents {a, b, c}; enum hisEvents {d, e, f, g};
I want to be able to declare an Event class which accpts constructors params
(myEvents a,char *"event_a")and
(hisEvents g,char* "event_g")Note that I don't want to just overload the constructor, since that is restrictive - what if new event enums are added?
And similarly with states, then have my FSMs each have a list of states.
Or am I just being anel, insisting on enums for eventId, when it would be much simpler to pass an int?
thanks.
Btw, I'd rather avoid Boost as it is itself undecided on how well it works in embedded systems. I prefer in-house developed, for complete control.