Аннотация:
В статье рассмотрен декларативный подход к решению задачи чтения/записи XML-файлов из программ на классическом C++. Метод основан на построении специальной структуры статических данных – метаданных типов.
Здравствуйте, Sergeem, Вы писали:
S>это они так журнал продвигают, чтоб его покупали. S>я не гордый, подожду пол-года.
[опять же OFF]
(с чувством глубокого морального удовлетворения): — Пусть, пусть эти придурки выделываются, кропают свои статьишки, выпускают свои журнальчики! Мы, русские люди, кушаем только бесплатное!
Здравствуйте, Sergeem, Вы писали:
S>это они так журнал продвигают, чтоб его покупали. S>я не гордый, подожду пол-года.
Разве полгода? А мне казалось быстрее. Я, кстати, rsdn magazine ни разу не покупал, так как ни разу не видел в продаже, а заказывать... мне как-то неловко, чтобы из-за меня человек в лютую непогоду по улице бегал, такое вот у меня небуржуйское воспитание... ( эй, я никого не осуждаю, спрячьте свои шотганы )
А не в непогоду как глупо заказывать, человек с удовольствием прогуляется по свежему воздуху, а ему деньги за это плати...
РМ>Разве полгода? А мне казалось быстрее. Я, кстати, rsdn magazine ни разу не покупал, так как ни разу не видел в продаже, а заказывать... мне как-то неловко, чтобы из-за меня человек в лютую непогоду по улице бегал,
это где так? (или шутишь?)
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)
Здраствуйте, Shire. Вы писали:
S> Подобное решение есть у Константина Книжника
Давненько я на его сайт не заглядывал, но насколько мне помнится, Книжник реализовал reflection на основе run-time классов (наподобие MFCшного CRuntimeClass). Подход же описанный в статье, основан на шаблонах. Первый раз такое решение я увидел в XTL
Здравствуйте, Андрей Мартынов АМ>В статье рассмотрен декларативный подход к решению задачи чтения/записи XML-файлов из программ на классическом C++. Метод основан на построении специальной структуры статических данных – метаданных типов.
Не удалось собрать под VC++ 6.0.
Ошибка:
error C2629: unexpected 'struct Rsdn::Serializer::FieldAttrubutes::StructFieldAttrubute<StructType,StructFieldType> ('
Здравствуйте, Андрей Мартынов, Вы писали:
АМ>Статья:
АМ>Авторы: АМ> Андрей Мартынов
АМ>Аннотация: АМ>В статье рассмотрен декларативный подход к решению задачи чтения/записи XML-файлов из программ на классическом C++. Метод основан на построении специальной структуры статических данных – метаданных типов.
где объявлены и для чего используются
CT2A()
CW2T()
Здравствуйте, nobody2, Вы писали:
N>Здравствуйте, Андрей Мартынов, Вы писали:
АМ>>Статья:
АМ>>Авторы: АМ>> Андрей Мартынов
АМ>>Аннотация: АМ>>В статье рассмотрен декларативный подход к решению задачи чтения/записи XML-файлов из программ на классическом C++. Метод основан на построении специальной структуры статических данных – метаданных типов.
N>где объявлены и для чего используются N>CT2A() N>CW2T()
Это макросы преобразования строк в ATL, сокращения от ConstTchar2Ansi и ConstWide2Tchar.
Смотри в MSDN T2A и W2T
Здравствуйте, romashka, Вы писали:
R>Здравствуйте, Андрей Мартынов АМ>>В статье рассмотрен декларативный подход к решению задачи чтения/записи XML-файлов из программ на классическом C++. Метод основан на построении специальной структуры статических данных – метаданных типов.
R>Не удалось собрать под VC++ 6.0. R>Ошибка: R> error C2629: unexpected 'struct Rsdn::Serializer::FieldAttrubutes::StructFieldAttrubute<StructType,StructFieldType> ('
R>В строке:
>>> StructFieldAttrubute( FieldName name R> , StructFieldType StructType::* offset R> , const StructFieldType* pDefault = NULL R> , const Layout<StructFieldType>& layout = DefaultLayout<StructFieldType>() R> ) R> : m_layout(layout) R> , m_name(name) R> , m_offset(offset) R> , m_pDefault(pDefault) R> {}
R>В статье не сказано об ограничения для платформы. R>В силу ограничений могу использовать только VC 6.0, а данное решение мне очень кстати.
Те же грабли и с VC 7.0. Проблема в использовании в качестве дефолтного значения шаблонной функции.
которая, в свою очередь, возвращает объект StructClassMeta<std::vector<int> >, который при создании инициализируется объектом, создаваемым функцией DefaultLayout<std::vector<int> >()
Здравствуйте, Андрей Мартынов, Вы писали:
АМ>Статья:
АМ>Авторы: АМ> Андрей Мартынов
АМ>Аннотация: АМ>В статье рассмотрен декларативный подход к решению задачи чтения/записи XML-файлов из программ на классическом C++. Метод основан на построении специальной структуры статических данных – метаданных типов.
Можете запинать меня ногами, мне понравилось... И дело не в названиях классов или еще в чем-либо, а в самом решении. Тем более это open source, дорабатывай сколько влезет, если это необходимо.
Species come and go, but the earth stands forever fast...
Здравствуйте, Salex100, Вы писали:
S>Здравствуйте, Андрей Мартынов, Вы писали:
S>Попытался рикрутить к WTL контролу (диалоговое окно). После загрузки конфигурации приложение с грохотом падает.
S>Хотя с моими классами работает!
Причина найдена. В функции Load есть следуящая строчка:
Тут я вижу бы ли заданы вопросы оставленные без ответа
касательно ошибок при переносе кода на VC версиями ниже 8.0
error C2629: unexpected 'Rsdn::Serializer::FieldAttrubutes::StructFieldAttrubute<StructType,StructFieldType> ('
error C2334: unexpected token(s) preceding '{'; skipping apparent function body
error C2664: 'Rsdn::Serializer::MetaClasses::StructClassMeta<struct Clr>::__ctor' : cannot convert parameter 1 from 'Clr_Layout3'
хотелось бы все таки знать, как убрать эти ошибки
спасибо.
Здравствуйте, Libra, Вы писали:
L>Можете запинать меня ногами, мне понравилось... И дело не в названиях классов или еще в чем-либо, а в самом решении. Тем более это open source, дорабатывай сколько влезет, если это необходимо.
Да, нет понимаешь, идея какая-то промежуточная. Потому что если храним всё в CRuntimeClass требуем наследования от него и проч., то тогда надо использовать RTTI и не придумывать свои LayoutDefault. Если же используем шаблоны, то вся информация наобходимая для сериализации может быть получена ещё на этапе компиляции за счёт 1000 и 1 раз перегруженных функций и опять не нужен LayoutDefault. А то что мы имеет это дублирование RTTI. Нет, как продукт очень даже ничего, но как идея лично мне не нравится, хотя не буду отрицать полезность таких идей и не буду отричать, что то чем я сейчас пользуюсь было написано в том числе и после прочтения этой статьи.