Реферат: Эффективное использование STL и шаблонов

(STransitionsProxy(letter) << “identifier” << “unknown” << “identifier” << “unknown”) <<

(STransitionsProxy(digit) << “number” << “number” << “identifier” << “unknown”)

)

);

На конструктор SFiniteStateMachine будет возложена задача проверки начального состояния. Оно должно быть в списке состояний.

Путем форматирования текста уже удалось придать аргументам конструктора вид таблицы. Однако это еще не все. При описании автомата были опущены все детали, связанные с шаблонами. На практике это означает, что при конструировании также придется указывать типы, что дополнительно “замусорит” текст. Несмотря на проблемы, связанные с препроцессором, он здесь поможет. Запись аргументов конструктора станет примерно такой:

FSMBEGIN( “empty” )

FSMSTATES “empty” << “number” << “identifier” << “unknown”

FSMEVENT(letter) “identifier” << “unknown” << “identifier” << “unknown”

FSMEVENT(digit) “number” << “number” << “identifier” << “unknown”

FSMEND

Такая запись уже приемлема для повседневного использования.

Детали реализации

Реализация должна включать ряд вспомогательных элементов, в частности, исключения. Автомат будет выдавать их в случае ошибки в описании состояний и переходов. При разработке своего класса исключений можно воспользоваться наследованием от класса стандартного исключения. Это даст возможность указать в блоке catch только ссылку на базовый стандартный класс исключений. Свой класс исключений можно определить так:

class SStateMachineException : public std::exception

{

private:

const std::string Message;

public:

SStateMachineException( const std::string & Msg ) : Message( Msg ) {}

SStateMachineException( const char * Msg ) : Message( Msg ) {}

virtual ~SStateMachineException() throw() {}

virtual const char * what( void ) const throw() { return Message.c_str(); }

private:

SStateMachineException();

};

В основной программе, использующей класс автомата, можно будет написать так:

. . .

try

{

К-во Просмотров: 416
Бесплатно скачать Реферат: Эффективное использование STL и шаблонов