| 
  • If you are citizen of an European Union member nation, you may not use this service unless you are at least 16 years old.

  • You already know Dokkio is an AI-powered assistant to organize & manage your digital files & messages. Very soon, Dokkio will support Outlook as well as One Drive. Check it out today!

View
 

Const Generator

Page history last edited by Boris Sivko 13 years, 5 months ago



 

Пример

 

>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.