Сериализация списка указателей в boost |
Здравствуйте, гость ( Вход | Регистрация )
Сериализация списка указателей в boost |
madnessw |
12.3.2010, 6:48
Сообщение
#1
|
Студент Группа: Участник Сообщений: 21 Регистрация: 12.3.2010 Пользователь №: 1527 Спасибо сказали: 0 раз(а) Репутация: 0 |
Доброговремени суток всем!
Возникла такая проблема: есть несколько класов
проблема вследующем нополучается сериализовать стуктуру типа pItemList Items, она объявлена как typedef list <boost::shared_ptr<Item>>pItemList. Посуте я пытаюсь сериализовать список умных указателей на что получаю: Error 7 error LNK2019: unresolved external symbol "protected: void __thiscall boost::archive::basic_binary_iprimitive<class boost::archive::binary_iarchive,char,struct std::char_traits<char> >::load(class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > &)" (?load@?$basic_binary_iprimitive@Vbinary_iarchive@archive@boost@@DU?$char_traits@D@std@@@archive@boost@@IAEXAAV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@@Z) referenced in function "public: static void __cdecl boost::archive::load_access::load_primitive<class boost::archive::binary_iarchive,class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > >(class boost::archive::binary_iarchive &,class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > &)" (??$load_primitive@Vbinary_iarchive@archive@boost@@V?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@@load_access@archive@boost@@SAXAAVbinary_iarchive@12@AA V?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@@Z) вот и не пойму где ошибка может кто сталкивался с подобным? |
|
|
madnessw |
12.3.2010, 8:28
Сообщение
#2
|
Студент Группа: Участник Сообщений: 21 Регистрация: 12.3.2010 Пользователь №: 1527 Спасибо сказали: 0 раз(а) Репутация: 0 |
С этим вроде разобрался: оказалось я пытался сериализовать wstring fIdent а буст не поддерживает сериализацую wstring.
Теперь вопрос как Сериализовать wstrinig ? |
|
|
Iron Bug |
12.3.2010, 18:10
Сообщение
#3
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
Буст поддерживает сериализацию wstring. Вроде бы он для этого должен быть скомпилен с ICU, хотя конкретно насчёт библиотеки сериализации точно не могу сказать, может, ей просто опцию какую-то надо указать при сборке. У меня буст собран с ICU и все юникодовские функции работают. Но не все комилеры поддерживают юникод. Например, mingw его не поддерживает.
Юзай wofstream и binary_woarchive, если компилятор позволяет. Если нет - то переводи в string и сериализуй как string, а потом обратно. Либо как бинарный поток. |
|
|
madnessw |
13.3.2010, 18:15
Сообщение
#4
|
Студент Группа: Участник Сообщений: 21 Регистрация: 12.3.2010 Пользователь №: 1527 Спасибо сказали: 0 раз(а) Репутация: 0 |
с wstring я разобрался в опциях прроекта переходим: Configuration properties -> C++ -> Langages->Treast wchar_t as Built-in type = <inherit from parent or project defaults>
и усё работает ))))))) теперь осталось только одно понять как сериализовать конструкцию типа List<shared_ptr<Item>> pItemList , где Item - класс, а проще как сериализовать список умных указателей на класс? Iron Bug - спасибо за совет) |
|
|
Iron Bug |
14.3.2010, 17:34
Сообщение
#5
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
я не совсем понимаю, нафига сериализовать такие сложные аггломераты, но люди пишут, что даже такой изврат возможен.
учимся пользоваться гуглом и в поиске по строке "boost serialization shared_ptr" находим вот это: http://www.boost.org/doc/libs/1_42_0/libs/...shared_ptr.html дальше читать всё это и усваивать. но я бы не стала связываться с такими наворотами. да и автор статьи не рекомендует этого делать, ибо даже после всей этой возни остаются некоторые нерешённые вопросы. а вообще, зачем тебе столько наворотов для сохранения в файл? может, всё куда проще решается, нежели чем через такие пампасы? конечно, если хочешь, ковыряй статью, пиши кучу кода. это не возбраняется. но что-то мне подсказывает, что есть куда более простое решение для задачи, которую ты пытаешься решить. Сообщение отредактировал Iron Bug - 14.3.2010, 17:35 |
|
|
madnessw |
16.3.2010, 4:23
Сообщение
#6
|
Студент Группа: Участник Сообщений: 21 Регистрация: 12.3.2010 Пользователь №: 1527 Спасибо сказали: 0 раз(а) Репутация: 0 |
эо пример класса конфигурации есть несколько деревьев Item может находиться сразу в нескольких деревьяк(у нас они называются измерения)
я думал сначало сохранять всё в поток но понял что пытаюсь написать велосипед тк в бусте сериализация позволяет сохранять в бинарник в текст и в поток) вот и думаю как это сделать))) по сути мне нужно сохранить список всех итемов и указателей а при загрузке востановить всё это дело в пямяти) |
|
|
Iron Bug |
16.3.2010, 10:26
Сообщение
#7
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
имхо, в такой ситуации лучше бы сделать синглтон, который работает непосредственно с конфигурацией, а в нём реализовать список элементов и сквозные массивы указателей на них (boost::intrusive).
ведь конфигурация - это обычно не то, что постоянно меняется и меняется неожиданно из разных мест. городить сериализацию тэмплейтов - дело неблагодарное. а главное - из пушки по воробьям |
|
|
madnessw |
18.3.2010, 5:24
Сообщение
#8
|
Студент Группа: Участник Сообщений: 21 Регистрация: 12.3.2010 Пользователь №: 1527 Спасибо сказали: 0 раз(а) Репутация: 0 |
Как всегда всё оказалось проще чем я дкмал)))
Почитав кучу доки я в boost нашол макрос BOOST_SERIALIZATION_BASE_OBJECT_NVP мне нужно было заюзать макрос ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Items) и вуаля всё заработало))) Насчёт стрельбы по воробьям из пушки: у буста она сильно точно стреляет и велосипеды у них хорошие , много функциональные)))) на этом тему можно считать закрытой)))) Iron Bug - спасибо за участие |
|
|
madnessw |
27.9.2010, 9:36
Сообщение
#9
|
Студент Группа: Участник Сообщений: 21 Регистрация: 12.3.2010 Пользователь №: 1527 Спасибо сказали: 0 раз(а) Репутация: 0 |
Вышел интересный Баг в сериализации wstring : у меня boost отказывается сериализовать wstring который содержит русские буквы.....
Может кто сталкивался с добной проблеммой? |
|
|
Iron Bug |
1.10.2010, 9:58
Сообщение
#10
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
проверь локали на машине, если это линюкс. может банально не быть нужной локали. проверь опции юникода для компилера.
если не оно, то пиши пример, как конкретно ты сериализуешь и чем собираешь. Сообщение отредактировал Iron Bug - 1.10.2010, 9:59 |
|
|
Текстовая версия | Сейчас: 2.12.2024, 2:12 |