Информация об изменениях

Сообщение Re[2]: CTC без препроцссора - помогите довести до ума! от 14.04.2017 10:05

Изменено 14.04.2017 10:51 rg45

Re[2]: CTC без препроцссора - помогите довести до ума!
Здравствуйте, kov_serg, Вы писали:

_>Лучше раскажите где вы используете compile time counter ?


Если кратко, декларативное описание больших структур данных, генерация типов, элементы рефлексии, сериализация, ввод-вывод.

Абстрактно, чуть детальнее. Представь, есть шаблонное объявление каких-то свойств
template <size_t> struct MemeberTraits;


При помощи CTC мы можем определить семейство специализаций:

CREATE_CTC<MemberCounter>

template <>
struct MemeberTraits<GET_CTC<MemberCounter>> // MemeberTraits<0>
{
  //...
};
template <>
struct MemeberTraits<GET_CTC<MemberCounter>> // MemeberTraits<1>
{
  //...
};
template <>
struct MemeberTraits<GET_CTC<MemberCounter>> // MemeberTraits<2>
{
  //...
};


Внутри каждой из специализаций разместить набор статических свойств, специфичных для члено какого-то класса. После этого эти наборы специализаций можно использовать для авотматической генерации, например, классов сериализации-десериализации, конверторов, аксессоров к базам данных... В общем, дофига всего.

Этот подход позволяет сколько угодно добавлять новые структуры данных, изменять и расширять существующие, не меняя при этом процедур работы с этими данными (сериализация/десериализация, вычитка/запись из/в БД, ввод-вывод, конверторы и пр).
Re[2]: CTC без препроцссора - помогите довести до ума!
Здравствуйте, kov_serg, Вы писали:

_>Лучше раскажите где вы используете compile time counter ?


Если кратко, декларативное описание больших структур данных, генерация типов, элементы рефлексии, сериализация, ввод-вывод.

Абстрактно, чуть детальнее. Представь, есть шаблонное объявление каких-то свойств
template <size_t> struct MemeberTraits;


При помощи CTC мы можем определить семейство специализаций:

CREATE_CTC<MemberCounter>

template <>
struct MemeberTraits<GET_CTC<MemberCounter>> // MemeberTraits<0>
{
  //...
};
template <>
struct MemeberTraits<GET_CTC<MemberCounter>> // MemeberTraits<1>
{
  //...
};
template <>
struct MemeberTraits<GET_CTC<MemberCounter>> // MemeberTraits<2>
{
  //...
};


Внутри каждой из специализаций разместить набор статических свойств, специфичных, например, для членов какого-то класса. Или для элеметнов списка типов, или для перечисления, или для элементров интрузивной отладки, или... После этого эти наборы специализаций можно использовать для авотматической генерации, например, классов сериализации-десериализации, конверторов, аксессоров к базам данных... В общем, дофига всего.

Этот подход позволяет сколько угодно добавлять новые структуры данных, изменять и расширять существующие, не меняя при этом процедур работы с этими данными (сериализация/десериализация, вычитка/запись из/в БД, ввод-вывод, конверторы и пр).