Вопрос

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

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

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

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

Это было полезно?

Решение

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

Хорошо прочитать :)

Другие советы

Есть действительно хорошая книга об использовании шаблон -процессора C ++:

Andrei Alexandrescu Modern C ++ Дизайн

Андрей начинает писать программы, используя шаблоны C ++!

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top