Реферат: Эффективное использование 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 и шаблонов