Глядя на 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 и С#, которые затем могут использоваться при генерации кода ( чтобы эффективно автоматизировать задачу, используя декларативный стиль).
На этом этапе моих исследований я ищу дополнительные материалы для чтения и примеры.