Здравствуйте, Андрей Мартынов, Вы писали:
АМ>В статье рассмотрен декларативный подход к решению задачи чтения/записи XML-файлов из программ на классическом C++. Метод основан на построении специальной структуры статических данных – метаданных типов.
а чего надо подкрутить, чтоб можно было с полями типа CString работать, типа так:
struct Clr
{
CString str;struct LayoutDefault : public Layout<Clr>
{
LayoutDefault()
{ // тег поле значение по умолчанию
Simple(_T("STRING" ), &Clr::str, "default string");
}
};
};
struct a
{
int i;
int j;
struct LayoutDefault : public Layout<Clr>
{
LayoutDefault()
{ // тег поле значение по умолчанию
Simple(_T("VarI" ), &a::i, 10);
Simple(_T("VarJ" ), &a::j, 10);
}
};
}
struct b : public a
{
int x;
int y;
????????????????
}
Здравствуйте, Macedonian, Вы писали:
M>При сборке обнаружились утечки памяти в нескольких местах, кто-нибудь это уже исправлял?
Я много чего уже исправил в этом коде, правда утечек не помню. Так что пример кода вызывающий утечку в студию, а там посмотрим.
Последний баг который я нашел, это проблема с ексепшенами:
struct Exception : public std::exception
{
Exception(const tstring& a_msg) : msg(a_msg) {}
const char *what() const
{ return CT2A(msg.c_str()); } // what вернет указатель на временный объект, который уже будет удален к моменту выхода из функцииprotected:
const tstring& msg;
};
Здравствуйте, CiViLiS, Вы писали:
M>>При сборке обнаружились утечки памяти в нескольких местах, кто-нибудь это уже исправлял? CVL>Я много чего уже исправил в этом коде, правда утечек не помню. Так что пример кода вызывающий утечку в студию, а там посмотрим.
Извини, что долго не отвечал, сессия )-:
Утечку вызывает код парсинга Xml, помещенный в MFC DLL, причем в консольном приложении тот же код не вызывает у компилятора подозрений в утечке
Собственно, код:
Здравствуйте, Macedonian, Вы писали:
M>Здравствуйте, CiViLiS, Вы писали:
M>>>При сборке обнаружились утечки памяти в нескольких местах, кто-нибудь это уже исправлял? CVL>>Я много чего уже исправил в этом коде, правда утечек не помню. Так что пример кода вызывающий утечку в студию, а там посмотрим.
M>Извини, что долго не отвечал, сессия )-:
А я уже как год забыл про это страшное слово
M>Утечку вызывает код парсинга Xml, помещенный в MFC DLL, причем в консольном приложении тот же код не вызывает у компилятора подозрений в утечке
К сожалению у меня сейчас времени нет посмотреть твой код -- на работе мелкий перезд, в результате два дня потеряны, и их надо отрабатывать Время появится только в выходные.
Если не работает код который в ДЛЛ, то распространенная проблема, это неправильные (не индентичные) ключи у компилятора/линкера для екзешника и для ДЛЛ. Если про эту проблему не знаешь, то можешь поискать на форуме --- подключение разных CRT часто встречается.
CVL>>ЗЫ Могу поделиться всеми своими фиксами, но только в понедельник. M>Было бы очень кстати здесь. Я немного изменил работу со строками, добавил поддержку const_string'ов и ввел новый инт, чтобы была возможность серелизовать в хексе. Исправил работу с enum и еще что-то по мелочи... Подробности не помню -- давно уже правил...
... << RSDN@Home 1.1.4 beta 7 rev. 458>>
"Бог не терпит голой сингулярности" -- Роджер Пенроуз
Здравствуйте, Odi$$ey, Вы писали:
OE>Здравствуйте, Андрей Мартынов, Вы писали:
АМ>>В статье рассмотрен декларативный подход к решению задачи чтения/записи XML-файлов из программ на классическом C++. Метод основан на построении специальной структуры статических данных – метаданных типов.
OE>а чего надо подкрутить, чтоб можно было с полями типа CString работать, типа так:
OE>
OE>struct Clr
OE>{
OE> CString str;
OE> struct LayoutDefault : public Layout<Clr>
OE> {
OE> LayoutDefault()
OE> { // тег поле значение по умолчанию
OE> Simple(_T("STRING" ), &Clr::str, "default string");
OE> }
OE> };
OE>};
OE>
Внимательно читаем статью к библиотеке, или читаем ошибку при смене типа переменной на CString и получаем:
в файле SerizlizerPrim.h в пространстве имен Rsdn::Serializer::Primitives добавляем шаблон для нужного типа.
Но по-моему тех, что реализованы в библиотеке достаточно. Для строк можно использовать tstring (это typedef на std::wstring), который оперирует 2х байтовыми символами. В значении по умолчанию пишем что-то вроде этого:
std::wstring(L"Microsoft")
С уважением, cpp_best.
P.S. Сам мучился с этим, и как всегда сработала извечная истина: находишь решение в ... (блин, уже спать пора)
Re: как сериализовать контейнер контейнеров контейнеров.