Сериализация декларативного анализа С++

Глядя на Java и С#, им удаётся сделать какую-то злую обработку, основанную на специальной ломаной основе anotation (простите меня, если это неправильное имя).

В С++ у нас есть две проблемы:

1) Нет способа аннотировать класс с информацией о типе, доступ к которой можно получить во время выполнения.
2) Разбор источника для генерации материала - это сложный способ.

Но я думал, что это можно сделать с помощью некоторого метапрограммирования шаблонов, чтобы добиться того же базового эффекта, что и анотации (все еще просто думая об этом). Подобно char_traits, которые специализированы для разных типов, шаблон xml_traits может использоваться декларативно. Этот класс признаков может использоваться для определения того, как класс сериализуется/десериализован, специализируясь на свойствах класса, который вы пытаетесь сериализовать.

Пример:

template<typename T>
struct XML_traits
{
    typedef XML_Empty   Children;
};

template<>
struct XML_traits<Car>
{
    typedef boost::mpl::vector<Body,Wheels,Engine>   Children;
};

template<typename T>
std::ostream& Serialize(T const&)
{
    // my template foo is not that strong.
    // but somthing like this.
    boost::mpl::for_each<typename XML_Traits<T>::Children,Serialize>(data);
}
template<>
std::ostream& Serialize<XML_Empty>(T const&)
{ /* Do Nothing */ }

Мой вопрос:

Кто-нибудь видел какие-либо проекты/декорации (а не только XML) там, где используются такие методы (мета-программирование шаблонов) для эмуляции концепции аннотации, используемой в languges, таких как Java и С#, которые затем могут использоваться при генерации кода ( чтобы эффективно автоматизировать задачу, используя декларативный стиль).

На этом этапе моих исследований я ищу дополнительные материалы для чтения и примеры.

Ответы

Ответ 1

В последнее время я рассмотрел следующее:

Хорошо прочитайте:)

Ответ 2

Существует действительно хорошая книга по использованию процессора шаблонов С++:

Андрей Александреску Современный дизайн на C++ Общее программирование и дизайн Образцы, применяемые Addison-Wesley, U.S.A., 2001 ISBN 0-201-70431-5

Андрей начинает писать программы с использованием шаблонов С++!

Ответ 3

Метапрограммирование шаблонов - действительно мощный инструмент, но все просто: вам просто нужно придумать свой собственный дополнительный синтаксис для описания свойств.

Да, синтаксический анализ С++ сложный, но нам нужны только ограниченные возможности синтаксического анализа: прочитайте список классов с информацией о иерархии и списком всех сериализованных свойств.

Это можно сделать даже в инструменте C/С++ с алгоритмом линейного сканирования, если мы определим некоторые фиктивные макросы.

Шаблоны могут абстрагировать экземпляр класса, и, кроме того, мы добавляем интрузивный RTTI.

Полное описание техники описано в моем ответе на этот вопрос

Как реализовать сериализацию в С++

Ответ 4

Boost.Serialization является ответом. Он вводит необходимые переносные RTTI для пользовательских типов сериализации.

Как насчет отражения во время выполнения на С++ - это отдельный вопрос.