Реферат: Эффективное использование STL и шаблонов
class SFiniteStateMachine { . . . };
В числе заготовленных стратегий есть и стратегия игнорирования неизвестного события:
template <class SEvent> class SIgnoreStrategy { public: inline void operator() ( const SEvent & ) const { return; } }; |
Если понадобятся другие действия, всегда можно написать собственный функтор по образу и подобию SIgnoreStrategy и передать его шаблону.
Многие источники, описывающие конечные автоматы, упоминают о возможности вызова функций при входе и выходе из состояния. Такую возможность легко предоставить, используя тот же подход стратегий. Функции входа и выхода из состояний удобно определять для класса, представляющего конкретное состояние. Вспоминая о требовании 5, дадим возможность гибкого управления такой возможностью. Предполагая, что функции класса состояния будут называться OnEnter и OnExit, можно написать несколько готовых функторов: не вызывающий ни одну из функций, вызывающий только OnEnter, вызывающий только OnExit и вызывающий обе функции.
template <class SState, class SEvent> class SEmptyFunctor { public: inline void operator() ( SState & From, const SEvent & Event, SState & To ) { return; } }; template <class SState, class SEvent> class SOnEnterFunctor { public: inline void operator() ( SState & From, const SEvent & Event, SState & To ) { To.OnEnter( From, Event ); } }; template <class SState, class SEvent> class SOnExitFunctor { public: inline void operator() ( SState & From, const SEvent & Event, SState & To ) { From.OnExit( Event, To ); } К-во Просмотров: 418
Бесплатно скачать Реферат: Эффективное использование STL и шаблонов
|