Реферат: Эффективное использование STL и шаблонов
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 #undef FSMEventType |
Альтернатива есть: полностью указывать все типы.
Осталось поместить шаблон в пространство имен. После этого им можно пользоваться.
Пример использования шаблона
Напишем код для решения поставленной в начале статьи задачи.
#include <iostream> #include <string> using namespace std; #include "FiniteStateMachine.h" using namespace FSM; К-во Просмотров: 421
Бесплатно скачать Реферат: Эффективное использование STL и шаблонов
|