То, что вы делаете, немного похоже на создание (простой) виртуальной машины в вашей программе.FSM, как правило, хорошо подходит для некоторых ограниченных проблем, таких как лексизация и синтаксический анализ, и, как вы, вероятно, заметили, вы можете получить немало регистрации и управления ошибками «бесплатно».
Однако, если вы попытаетесь применить шаблон FSM ко всему (что будет непросто, например, для программ с графическим интерфейсом, которые содержат довольно много состояний, которые вы обычно не захотите переводить в явные состояния), выВы поймете, что вам также нужны средства для отладки вашего FSM (поскольку отладчик C ++ не будет понимать ваши состояния и события) и средства для связи и повторного использования состояний (так каксостояния не будут конструкциями уровня ОО).Если вы когда-нибудь захотите передать свой код кому-то другому, ему или ей потребуется дополнительное обучение для успешного использования вашего FSM.Собираетесь ли вы использовать один движок FSM для нескольких приложений?Если да, то как вы собираетесь работать с версиями и обновлениями?
Используйте правильный инструмент для правильной работы.Каждый подход имеет свои сильные и слабые стороны.Ваше решение добавляет еще один уровень сложности : вы можете работать с журналированием и обработкой ошибок несколькими способами C ++.Если вы недовольны написанием кода на C ++, вы можете рассмотреть другие существующие языки, а не создавать язык FSM, который понимаете только вы.