Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Chapter 5. Questions & Answers, tips

Boost , Meta State Machine (MSM) , Part I. User' guide

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Chapter 5. Questions & Answers, tips

Где я должен определить государственную машину?Учебники реализованы в простом файле cpp для простоты. Я хочу моделировать динамическое поведение класса как машины состояния, как я должен определять машину состояния?

Ответить: Обычно вы хотите реализовать государственную машину как атрибут класса. К сожалению, конкретная государственная машина представляет собой типдеф, который не может быть объявлен вперед. Это оставляет вам две возможности:

  • Обеспечить определение машины состояния внутри класса заголовка и содержать экземпляр в качестве атрибута. Простой, но с несколькими недостатками: использование директив пространства имен не рекомендуется, а стоимость компиляции времени для всех модулей, включая заголовок.

  • Сохраняйте указатель состояния в виде (общего) указателя внутриопределения классаи реализуйте машину состояния в файлеcpp.. Минимальное время компиляции, с использованием директив в порядке, но государственная машина теперь находится внутри кучи.

Вопрос: on_entry получает в качестве аргумента отправленное событие. Какое событие происходит, когда состояние активируется по умолчанию (потому что это начальное состояние)?

Ответ: Чтобы вы знали, что государство активировано по умолчанию, MSM генерирует импульс::msm::Init Событие по умолчанию.

Вопрос: Почему я не вижу призыва к переходу в моей подмашине?

Ответ: Правило приоритета, установленное UML. В ней говорится, что в случае переходного конфликта наиболее внутреннее состояние имеет более высокий приоритет. Таким образом, после запроса внутреннего состояния, содержащее соединение должно быть также предложено обработать переход и найти возможный переход.

Вопрос: Почему я получаю ошибку компиляции, говорящую, что компилятор не может преобразовать в функцию ...Fsm::*(some_event)?

Ответ: Вы, вероятно, определили переход, вызванный событием some_event, но использовали метод защиты/действия, принимая другое событие.

Вопрос: Почему я получаю ошибку компиляции, говоря что-то вроде & #8220; слишком мало & #8221; или & #8220; слишком много & #8221; аргументы шаблона?

Ответ: Вы, вероятно, определили переход в виде a_row или g_row, где вы хотели просто _row или наоборот. С Роу это может означать, что вы забыли "ни одного".

Вопрос: Почему я получаю очень длинную ошибку компиляции, когда определяю более 20 строк в таблице переходов?

Ответ: MSM использует Boost. MPL под капотом и это максимальный размер по умолчанию. Пожалуйста, определите следующие 3 макроса, прежде чем включать любые заголовки MSM:

#define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
#define BOOST_MPL_LIMIT_VECTOR_SIZE 30 // or whatever you need               
#define BOOST_MPL_LIMIT_MAP_SIZE 30 // or whatever you need 

Вопрос: Почему я получаю эту ошибку: & #8221; ошибка C2977: 'boost::mpl::vector': слишком много шаблонных аргументов”?

Ответ: Первая возможность заключается в том, что вы определили таблицу перехода как, скажем, вектор17 и имеете 18 записей. Во-вторых, у вас есть 17 записей и составное состояние. Под капотом MSM добавляет строку для каждого события в составной таблице переходов. Третий заключается в том, что вы использовали mpl::vector без количества записей, но близки к MPL по умолчанию 50 и имеют композит, тем самым толкая вас выше 50. Тогда вам нужен mpl/vector60/70….hpp и mpl/map60/70….hpp

Вопрос: Почему я получаю очень длинную ошибку компиляции, когда определяю более 10 состояний в машине состояний?

Ответ: MSM использует Boost. Слияние под капотом и это максимальный размер по умолчанию. Пожалуйста, определите следующий макрос перед включением любых заголовков MSM:

#define FUSION_MAX_VECTOR_SIZE 20 // or whatever you need 

Статья Chapter 5. Questions & Answers, tips раздела Meta State Machine (MSM) Part I. User' guide может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Part I. User' guide ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-07-05 03:21:29/0.0038659572601318/0