Рефераты | Рефераты по информатике, программированию | Эффективное использование STL и шаблонов | страница реферата 7 | Большая Энциклопедия Рефератов от А до Я
Большая Энциклопедия Рефератов от А до Я
  • Рефераты, курсовые, шпаргалки, сочинения, изложения
  • Дипломы, диссертации, решебники, рассказы, тезисы
  • Конспекты, отчеты, доклады, контрольные работы

  • Поскольку контейнер vector поддерживает operator [], то для поиска состояния, в которое необходимо совершить переход, в таблице переходов можно воспользоваться подобной конструкцией:

    NewState = Transitions[ EventIndex ] [ StateIndex ];

    где соответствующие индексы могут быть вычислены с помощью алгоритма STL distance:

    inline int GetStateIndex( const StateType &  State ) const

    {

        return std::distance( States.begin(), std::find( States.begin(), States.end(), State ) );

    }

    Разумеется, класс автомата должен будет иметь функцию, принимающую и обрабатывающую событие. Существует два варианта. Первый – это функция, второй – перегрузка какого-либо оператора. Для придания дополнительной гибкости реализуем оба варианта:

    SFiniteStateMachine &  AcceptEvent( const EventType &  Event )

    {

       . . .

    }

    и

    inline SFiniteStateMachine & operator << ( const EventType & Event )

    { return AcceptEvent( Event ); }

    Перегрузка operator << даст возможность использовать автомат в таком стиле:

        // Принять события Event1, Event2 и Event3

    MyMachine << Event1 << Event2 << Event3;

    Остается вопрос: что делать, если придет событие, для которого у автомата нет описания переходов? Возможны варианты: просто проигнорировать такое событие, сгенерировать исключение или сделать что-то, определяемое пользователем. Воспользуемся идеей стратегий ([4]) и включим в число аргументов шаблона функтор, который будет определять нужную стратегию поведения. Такой подход вполне соответствует требованию 5. При этом можно задать стратегию по умолчанию – например, генерировать исключение. Теперь заголовок шаблона выглядит так:

    template <class SState, class SEvent, class SUnknownEventStrategy = SThrowStrategy<SEvent> >

    class SFiniteStateMachine { . . . };

    В числе заготовленных стратегий есть и стратегия игнорирования неизвестного события:

    template <class SEvent>

    class SIgnoreStrategy


    Рекомендуем скачать другие рефераты по теме: налоги и налогообложение, конспект по русскому.



    Предыдущая страница реферата | 2  3  4  5  6  7  8  9  10  11  12 |




    Поделитесь этой записью или добавьте в закладки

       




    Категории:



    Разделы сайта




    •