Я вполне уверен, что это вопрос шаблона, так как я не могу решить его каким-либо другим способом - но не шаблонные решения также приветствуются.
У конечного автомата есть несколько программных состояний, и каждое состояние может реагировать на несколько событий.
Итак, я хочу определить классы для Event, State и FSM. FSM имеет коллекцию (возможно векторную, может быть связанным списком, если STL создает проблемы во встроенной системе) состояний, а State - коллекцию событий.
Каждое состояние и событие имеют уникальный идентификатор и строку имени для отладки морских свиней.
Чтобы быть неуклюжим, я не хочу, чтобы идентификаторы были целыми числами, а были элементами перечисления. Каждый FSM имеет разные перечисления для своих состояний и событий.
Как лучше всего это кодировать? Можете ли вы привести пример с двумя простыми FSM или с одним FSM с двумя состояниями, каждое с двумя событиями?
Например, если у меня есть
enum myEvents {a, b, c};
enum hisEvents {d, e, f, g};
Я хочу иметь возможность объявить класс Event, который принимает конструкторы params
(myEvents a,char *"event_a")
и (hisEvents g,char* "event_g")
Обратите внимание, что я не хочу просто перегружать конструктор, так как это ограничительно - что, если будут добавлены новые перечисления событий?
И аналогично со штатами, у каждого из моих FSM есть список состояний.
Или я просто анель, настаивающий на перечислениях для eventId, когда было бы на намного проще передать int?
спасибо.
Кстати, я бы предпочел избегать Boost, поскольку он сам не определился с тем, насколько хорошо он работает во встроенных системах. Я предпочитаю собственную разработку для полного контроля.