Эффективное использование STL и шаблонов
| Категория реферата: Рефераты по информатике, программированию
| Теги реферата: рефераты по политологии, шпаргалки по математике юридические рефераты
| Добавил(а) на сайт: Jezrin.
Предыдущая страница реферата | 1 2 3 4 5 6 7 8 9 10 11 | Следующая страница реферата
SStatesMachineProxy() << SStatesListProxy << STransitionsProxy |
Перегруженный operator<< проверит, что сначала идет список состояний, что список состояний только один, что в списках переходов нет повторяющихся событий и в переходах указаны только состояния, указанные в списке состояний. operator<< также проверит, что количество состояний в списках переходов равно количеству состояний в списке состояний. В результате конструктор SFiniteStateMachine будет выглядеть так:
SFiniteStateMachine( const StateType & StartState, const SFiniteStateMachineProxy & ProxyMachine ); |
Теперь очередь за реализацией описанных выше идей. Запишем конструктор автомата для рассматриваемого примера полностью.
SFiniteStateMachine FirstMachine( “empty”, (SFiniteStateMachineProxy() << (SStatesListProxy() << “empty” << “number” << “identifier” << “unknown”) << (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: Рекомендуем скачать другие рефераты по теме: налоги и налогообложение, конспект по русскому. Категории:Предыдущая страница реферата | 1 2 3 4 5 6 7 8 9 10 11 | Следующая страница реферата Поделитесь этой записью или добавьте в закладки |