2013-02-20 2 views
10

Привет, кому-то уже удалось сериализовать C++ 11 std :: shared_ptr с boost :: serialization. Там много устаревших сообщений, но нет приемлемого решения. Я не буду обсуждать, почему я хочу использовать std :: shared_ptr, просто примите это!C++ 11 std :: shared_ptr + boost :: serialization

Я нашел этот пост: boost serialize and std::shared_ptr, но он не отвечает на мою проблему, как сериализовать std :: shared_ptr, он предлагает использовать boost :: shared_ptr, что невозможно в моем случае.

И этот пост How can boost::serialization be used with std::shared_ptr from C++11? также рекомендует использовать boost :: shared_ptr.

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

Эй, ребята, я, наконец, нашел решение своей проблемы, см. https://stackoverflow.com/a/14999396/2039157 для моего ответа.

+0

Преобразование std :: shared_ptr для boost :: shared_ptr для сериализации. – ForEveR

+0

Да, я собирался сказать, что если использовать 'boost :: shared_ptr' вариант, это ответ: http://stackoverflow.com/questions/9944274/boost-serialize-and-stdshared-ptr – jogojapan

+0

Hm, что именно вы имеете в виду, обратившись? Надеюсь, вы не хотите заменить std :: shared_ptr boost :: shared_ptr;) Пожалуйста, дайте пример о том, как должно работать преобразование. – denim

ответ

0

Невозможно «просто» создать сериализатор < < и десериализатор >>, который «просто» превратит сериализацию shptr в сериализацию указателя объекта? Если еще не сделано, я почти уверен, что это возможно в < 100 строк кода.

Кроме того, я знаю, что вы указали не спрашивать, но все же я буду: когда вы пытаетесь сериализовать переменную «X», которая является shptr, почему вы не можете просто сериализовать разыменованные * shptr? Это не кажется достаточной разницей для меня, чтобы беспокоиться о добавлении сериализации для smartptrs. Хм .. хорошо. эстетику. Но все же я думаю, что это выполнимо.

В любом случае, однако, вы можете нажать другую стену: если вы используете наследование классов, и если вы носите с собой объекты в пределах shptr через указатель на базовый класс, вы будете иметь очевидную проблему, что сериализатору не будет знать, что на самом деле он упорядочен для сериализации. Но это классическая проблема для сериализации без RTTI, что, ну, вы хотите как-то решить, но это не проблема shptrs.

отказ от ответственности: последний раз, когда я использовал boost :: serialization было несколько лет назад. Я на самом деле не пытался сериализовать shptr, но из того, что я помню, это была довольно открытая структура, относительно легко расширяемая для любого настраиваемого типа, поэтому я предполагаю, что shptrs не лучше, чем мои странные классы, to-serialize :)

+2

Проблема в том, что среда boost :: serialization обеспечивает файл заголовка «boost/serialization/shared_ptr.hpp», который позволяет сериализовать boost :: shared_ptr, и это работает вполне (я попробовал). Проблема в том, что у меня есть std :: shared_ptr, который я должен сериализовать, и нет специального заголовка в lib :: serialization lib, который обрабатывает std :: shared_ptr. Поэтому я хотел знать, удалось ли кому-либо еще сериализовать std :: shared_ptr. – denim

Смежные вопросы