Реализация конечного автомата |
Здравствуйте, гость ( Вход | Регистрация )
Реализация конечного автомата |
Andrew Selivanov |
1.9.2008, 11:35
Сообщение
#1
|
Участник Группа: Участник Сообщений: 249 Регистрация: 9.10.2007 Из: Москва Пользователь №: 3 Спасибо сказали: 15 раз(а) Репутация: 6 |
Как реализовать конечный автомат с использованием метапрограммирования: http://www.rsdn.ru/article/alg/Static_Fini...ate_Machine.xml by Alexander Nikolayenko © 2005
Автор предлагает генерировать таблицу переходов с использованием шаблонов. Видимо следующий шаг после этого > Boost.Spirit Признаться я в основном тупо использую switch/case конструкции (по разным причинам), хотелось бы услышать мнение других... |
|
|
kwisp |
22.7.2009, 16:19
Сообщение
#2
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
меня коллега ткнул носом на следующий способ реализации конечного автомата когда мой swich/case вырос до громадных размеров
1. создаешь енум, где элементы состояния автомата. 2. создаешь где быто нибыло (в классе в основном) статический массив указателей на функции обработчики. 3. меняешь состояние тут же проверяешь если есть обработчик в массиве вызываешь его. и быстрее в общем случае чем switch/case и меньше места занимает и модульность и гибкость. можно обработчики менять и обнулять если надо. коллега сказал что подсмотрел в ядре линукса основную идею. если кому интересно выложу пример. П.С. кажется где то я уже это писал.... |
|
|
AD |
22.7.2009, 16:51
Сообщение
#3
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
меня коллега ткнул носом на следующий способ реализации конечного автомата когда мой swich/case вырос до громадных размеров 1. создаешь енум, где элементы состояния автомата. 2. создаешь где быто нибыло (в классе в основном) статический массив указателей на функции обработчики. 3. меняешь состояние тут же проверяешь если есть обработчик в массиве вызываешь его. и быстрее в общем случае чем switch/case и меньше места занимает и модульность и гибкость. можно обработчики менять и обнулять если надо. Может быть лучше с помощью паттерна Состояние/State? Не реализовывал, но, думаю, стоит попробовать. |
|
|
Текстовая версия | Сейчас: 23.11.2024, 10:44 |