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