Библиотека использует несколько макросов конфигурации в , а также два макроса конфигурации, предназначенные для предоставления приложением. Кроме того, два общедоступных варианта компилятора также влияют на доступные функции.
C++ RTTI можно включать или выключать. При выключении использованиеstate_cast<>()приводит к ошибке времени компиляции (state_downcast<>()все еще доступно). Кроме того,BOOST_STATECHART_USE_NATIVE_RTTIне должно быть определено одновременно.
Обработка исключений C++ может быть включена или выключена. При выключении поддержка обработки ошибок библиотекибольше не доступна.
Следующие макросы могут быть определены приложением, использующим библиотеку:
Macro
Meaning
BOOST_STATECHART_USE_NATIVE_RTTI
When defined, the library no longer uses its own speed-optimized RTTI
implementation. Instead, native C++ RTTI is employed (see RTTI customization in the
performance document for more information). This has the following
effects:
state_machine::state_base_typeстановится полиморфным типом. То есть, когдаtypeidприменяется кstate_machine::state_base_typeссылке, результат относится кtype_infoобъекту, представляющему тип наиболее производного типа состояния.
Все государства должны хранить на один указатель меньше, что приводит к сокращению объема памяти машины в лучшем случае примерно на 15%.
В большинстве случаев скорость отправки снижается. Это связано с тем, что нативные значения C++ RTTI извлекаются через дополнительное опосредование практически на всех платформах. См.Компромиссы скорости и масштабируемостив документе об исполнении для сроков
BOOST_STATECHART_RELAX_TRANSITION_CONTEXT
When defined, the sequence of actions that are called
during a transition is relaxed. That is, its is no longer necessary
that all states up to the innermost common context are exited before
the transition action is called (as mandated by the UML standard).
Instead, the transition action can be a member of either the transition
source or any direct or indirect outer context and is called as soon as
all possibly active inner states have been exited. Then all remaining
active states up to the innermost common context are exited before
entering all states down to the transition destination
Оба макроса должны быть последовательно определены или не определены для всех блоков перевода, которые позже связаны в один и тот же исполняемый файл. Невыполнение этого требования неизбежно приведет к нарушениям ПДР. В зависимости от компилятора и технологии линкера такие нарушения могут проявляться или не проявляться в ошибках времени ссылки.