Образовательный портал Claw.ru
Всё для учебы, работы и отдыха
» Шпаргалки, рефераты, курсовые
» Сочинения и изложения
» Конспекты и лекции
» Энциклопедии

Теперь можно будет написать так:

// Принять событие Event1 и сбросить автомат в начальное состояние

MyMachine << Event1 << RestMachine;

Результатом работы автомата является состояние, в которое он перешел. Для получения текущего состояния напишем функцию и перегрузим оператор вывода в поток класса автомата:

inline StateType GetCurrentState( void ) const { return CurrentState; }

template <class SState,

          class SEvent,

          class SFunctor,

          class SUnknownEventStrategy >

ostream &

operator<< (ostream &  Stream,

            const SFiniteStateMachine<_SState, _SEvent,

              _SFunctor,_SUnknownEventStrategy> & Machine )

{

  return Stream << Machine.GetCurrentState();

}

Теперь, если для класса состояния определен оператор вывода в поток, можно написать такой фрагмент кода:

MyMachine << Event1 << RestMachine;

cout << MyMachine;  // Эквивалентно cout << MyMachine.GetCurrentState();

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

#define FSMStateType   string     // Тип состояния

#define FSMEventType   int        // Тип события

. . .

#undef FSMStateType


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


Категории:




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


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

   



Рефераты от А до Я


Полезные заметки

  •