Пример
>gen_const -n generator::main -r date_time current const all_current
В результате будут созданы два файла:
date_time.hpp
date_time.cpp
Данные файлы собираются в пространстве имен generator::main, т.е. работы в каталогах проекта: "generator/main/date_time.cpp" и "generator/main/h/date_time.hpp".
Соответственно классы будут находится в namespace "generator::main".
Внутри находится базовый тип date_time_t и три дочерних (current_date_time_t, const_date_time_t, all_current_date_time_t).
Также имеется общий класс (date_time_modes_t), который держит под контролем все имеющиеся типы.
Использование
Применяется для констант, для которых важно: функциональный контроль за полным набором, быстрая расширяемость, отсутствие необходимости создания множеств экземпляров констант.
Принципиально приложение строится таким образом, чтобы использовать константы в общем случае. И если например необходимо добавить новую, то она добавляется только в саму иерархию.
Элемент типа
const date_time_t * const_time_1 = date_time_modes_t::factory( "const" );
const date_time_t * const_time_2 = date_time_modes_t::factory( current_date_time_t().type() );
Сравнение двух элементов
const_time_1 == const_time_2
Сравнение с константой
const_time_2->type() != current_date_time_t().type()
const_time_2 == date_time_modes_t::factory( const_date_time_t().type() )
Печать типа для пользователя
const_time_1->type()
current_date_time_t().type()
Получить список констант через разделитель
date_time_modes_t::get_list( " | " )
Установка типа при непредсказуемом вводе
std::string dtm;
std::cin >> dtm;
if ( date_time_modes_t::exist_type( dtm ) )
const_time = date_time_modes_t::factory( dtm );
Расширение класса согласно иерархии
// Режим генерации времени операции.
class date_time_t
{
public:
//! Стринговое представление типа.
virtual std::string
type() const = 0;
//! Создать контроллер согласно типу.
virtual a_serial_controller_t *
get_new_instance(
//! Имя агента-контроллера.
const std::string & name,
//! Конфигурация создания.
const serial_cfg_t & send_cfg,
//! Соединение, с которым работает контроллер.
connect_context_t & connect_context ) const = 0;
};
//! Использовать текущее время на старте транзакции.
class current_date_time_t : public date_time_t
{
public:
virtual std::string
type() const
{
return "check";
}
virtual a_serial_controller_t *
get_new_instance(
const std::string & name,
const serial_cfg_t & send_cfg,
connect_context_t & connect_context ) const;
};
Т.е. общая часть в интерфейсе, определяемая для каждого типа. И контроль за всеми типами уже имеется в date_time_modes_t.
Исходники
Rar
Comments (0)
You don't have permission to comment on this page.