Реализация условий события в автомате состояний C ++ - PullRequest
3 голосов
/ 02 декабря 2008

Я использую иерархический FSM для встроенного интерфейса приложения C ++. Я хотел бы использовать небольшие функции, чтобы определить, можно ли инициировать определенные события между состояниями, а также использовать их для внесения изменений в базу данных: однако создание нового класса с различными функциями событий для каждого состояния также утомительно. как установка указателей на них в качестве обратных вызовов. (мы говорим о 300 функциях здесь.)

Если бы C ++ поддерживал лямбда-функции, я бы использовал их, но у меня нет большого веса в архитектуре проекта, поэтому я неохотно использую сторонние решения, которые требуют интенсивной интеграции библиотек (например, boost) или включение дополнительных шагов препроцессора.

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 02 декабря 2008

На самом деле, если вы используете библиотеку Boost / TR1, есть поддержка лямбда-функций . Подробности можно найти на веб-сайте Boost .

0 голосов
/ 23 апреля 2011

Вы смотрели на Qt's QStateMachine ? Это может послужить источником вдохновения.

0 голосов
/ 02 декабря 2008

Новый C ++ 0x стандарт близок к завершению и принятию. Это должно закончиться тем, что C ++ 09 будет представлен в следующем году. Этот стандарт будет включать лямбда-функции непосредственно на языке и устарел необходимость в аналогичной библиотеке повышения. Компилятор C ++ в предварительном просмотре технологии Visual Studio 2010 уже поддерживает функции Lambda для Visual C ++ Team Blog .

В качестве альтернативы, вы можете создать Lua привязок для вашей логики и использовать таблицы для обработки FSM как , показанное в этой вики . Это очень гибкое решение, которое позволит настроить FSM без перекомпиляции вашего C ++ проекта. Кроме того, лямбда-функции (а также замыкания ) являются родными и стабильными в Lua. Lua сопрограммы также стоит изучить, чтобы упростить реализацию FSM.

...