Ответ 1
В последнее время я рассмотрел следующее:
- Ночная инициатива, которая предоставила систему С++ Reflection
- С++ Runtime Type System от Avi Bar-Zeev
- Сообщения блога на Reflection в С++ (1, 2, 3) Maciej Sinilo
Хорошо прочитайте:)
Глядя на 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 и С#, которые затем могут использоваться при генерации кода ( чтобы эффективно автоматизировать задачу, используя декларативный стиль).
На этом этапе моих исследований я ищу дополнительные материалы для чтения и примеры.
В последнее время я рассмотрел следующее:
Хорошо прочитайте:)
Существует действительно хорошая книга по использованию процессора шаблонов С++:
Андрей Александреску Современный дизайн на C++ Общее программирование и дизайн Образцы, применяемые Addison-Wesley, U.S.A., 2001 ISBN 0-201-70431-5
Андрей начинает писать программы с использованием шаблонов С++!
Метапрограммирование шаблонов - действительно мощный инструмент, но все просто: вам просто нужно придумать свой собственный дополнительный синтаксис для описания свойств.
Да, синтаксический анализ С++ сложный, но нам нужны только ограниченные возможности синтаксического анализа: прочитайте список классов с информацией о иерархии и списком всех сериализованных свойств.
Это можно сделать даже в инструменте C/С++ с алгоритмом линейного сканирования, если мы определим некоторые фиктивные макросы.
Шаблоны могут абстрагировать экземпляр класса, и, кроме того, мы добавляем интрузивный RTTI.
Полное описание техники описано в моем ответе на этот вопрос
Boost.Serialization является ответом. Он вводит необходимые переносные RTTI для пользовательских типов сериализации.
Как насчет отражения во время выполнения на С++ - это отдельный вопрос.