Блог программиста

Цель: пассивный доход 100 тыс. руб. в мес.

Задачи:

  1. Разработка языка Cj
  2. ...
  3. ...


Также в блоге: изучаем и разрабатываем что-то новое, делимся опытом.

Подписывайтесь:
Cj - язык программирования

Новый язык программирования, для разработки сайтов и приложений, подробнее...


Спецификация:

  1. Комментарии
  2. Типы данных, переменные, функции
  3. ...

Быстрая конфигурация проекта

Разрабатывая юникодную строку String для Cj-фреймворка, вдруг возникло желание сделать юникодное преобразование. Какой вариант выбрать? Либо на базе своего самописного кода, либо на базе STL, либо на базе Boost или каких-то других библиотек?

Как можно решить такую задачу?

  1. Классу String добавить указатель на преобразователь строки (класс Utf), но выделение такого указателя слишком накладно и его придётся присваивать при создании каждой строчки, что просто нереально
  2. Указатель преобразования строки добавить в глобальную переменную, например, application. Это решение предполагает, что пользователь Cj-фрейворка должен его обязательно инициализировать

Решение №2 более-менее нормальное, но решили пойти другим путём: создаём файл cfg.h, в нём прописываем с помощью define нужные макросы UTF_CJ или UTF_STL или UTF_BOOST (где UTF - имя класса, а CJ, STL или BOOST - реализация):

#define UTF_CJ
//#define UTF_STL
//#define UTF_BOOST

Далее, в зависимости от описанного макроса применяем различный код:

	u32string Utf::toUtf32(string &utf8) {
#ifdef UTF_CJ
		//cj code
#elif USING_STL
		Convert32 convert32;
		return convert32.from_bytes(value);
#elif USING_BOOST
		return boost::locale::conv::utf_to_utf(value);
#endif
	}

Отлично! Но это ещё не всё. Как мы на это посмотрим с точки зрения методологии Super Fast?

С точки зрения этой методологии, каждый проект должен иметь свою конфигурационную XML-ку, например, cjCore.xml для проекта cjCore:

<project-config>
	<path>src</path> - это путь от корня проекта до исходников проекта
	<class-list>
		<class name="Utf">
			<lib selected="1">CJ</lib>
			<lib>STL</lib>
			<lib>BOOST</lib>
		</class>
	</class-list>
</project-config>

Теперь создаём проект project1 и пропишем в project1.xml зависимость проекта от библиотеки cjCore:

<project-config>
	<dependencies>
		<lib path="../cj/cjCore">cjCore</lib>
	</dependencies>
</project-config>

А теперь осталось реализовать на базе этих XML-ек визуальный конфигуратор. Это будет некое приложение (для кросса, напишем его на Qt), которое будет работать сохранять/загружать XML-ки и, О КРУТО, генерировать cfg.h файлы!

Выглядеть он будет примерно так:

окно правки списка классов:

Визуальный конигуратор проектов - это маленький шажочек в реализации методологии Super Fast.


Отправить комментарий
Контакты
vk.com/sitev_ru
Skype: sitev.ru
E-mail: mike@sitev.ru
github.com/sitev

Рейтинг@Mail.ru

Besucherzahler
счетчик посещений