2013-02-20 20 views
10

Witam, czy ktoś już zdążył serializować C++ 11 std :: shared_ptr z boost :: serialization. Istnieje wiele przestarzałych postów, ale żaden z akceptowalnym rozwiązaniem. Nie zamierzam się zastanawiać, dlaczego chcę użyć std :: shared_ptr, po prostu to zaakceptuj!C++ 11 std :: shared_ptr + boost :: serializacja

Znalazłem ten inny wpis: boost serialize and std::shared_ptr, ale nie odpowiada na mój problem, jak serializować std :: shared_ptr, który sugeruje użycie boost :: shared_ptr, co nie jest możliwe w moim przypadku.

I ten post How can boost::serialization be used with std::shared_ptr from C++11? zaleca również użycie boost :: shared_ptr.

Byłbym zainteresowany, gdyby ktoś znalazł już pracę, która zarządza serializacją std :: shared_ptr.

Hej, w końcu znalazłem rozwiązanie mojego problemu, aby uzyskać odpowiedź na pytanie https://stackoverflow.com/a/14999396/2039157.

+0

Konwertuj std :: shared_ptr, aby zwiększyć :: shared_ptr dla serializacji. – ForEveR

+0

Tak, zamierzałem powiedzieć, że jeśli używasz 'boost :: shared_ptr' jest opcją, to jest odpowiedź: http://stackoverflow.com/questions/9944274/boost-serialize-and-stdshared-ptr – jogojapan

+0

Hm, co dokładnie rozumiesz przez konwersję? Mam nadzieję, że nie zamienisz std :: shared_ptr na boost :: shared_ptr;) Podaj przykład, jak powinna działać ta konwersja. – denim

Odpowiedz

0

Czy nie można "po prostu" utworzyć serializatora < < i deserializatora >>, który "po prostu" zmieni serializację shptr na serializację obiektowo-wskaźnikową? Jeśli jeszcze tego nie zrobiłeś, jestem prawie pewien, że jest to możliwe w < 100 linii kodu.

Ponadto, wiem, że zadeklarowałeś, że nie chcesz pytać, ale nadal będę: Kiedy spróbujesz serializować zmienną "X", która jest shptr, dlaczego nie możesz serializować dereferencji * shptr? To nie wydaje mi się wystarczającą różnicą, żebym zawracał sobie głowę dodawaniem serializacji do smartptrów ... Hm ... ok. estetyka. Ale wciąż uważam, że jest to wykonalne.

Anyways, jednak można trafić inną ścianę: jeśli używasz klasy dziedziczenia i jeśli nosić ze sobą obiektów w shptr poprzez wskaźnik do klasy bazowej, trzeba będzie oczywisty problem, że serializer nie będzie wiedział, co właściwie nakazuje serializować. Ale to klasyczny problem dla serializacji bez RTTI, który, cóż, jakoś rozwiązałeś, ale to nie jest problem shptrs.

zrzeczenie się: ostatni raz użyłem boost :: serialization było kilka lat temu. Tak naprawdę nie próbowałem serializować shptr, ale z tego, co pamiętam, było to dość otwarte środowisko, stosunkowo łatwe do rozszerzenia na dowolny niestandardowy typ, więc zakładam, że shptrs nie są lepsze od moich dziwnych klas-że-I-managed- serializować :)

+2

Problem polega na tym, że struktura boost :: serialization udostępnia plik nagłówkowy "boost/serialization/shared_ptr.hpp", który umożliwia serializację boost :: shared_ptr i działa to całkiem będzie (próbowałem). Problem polega na tym, że mam std :: shared_ptr, który muszę serializować i nie ma specjalnego nagłówka w boost :: serialization lib, która obsługuje std :: shared_ptr. Tak więc chciałem się dowiedzieć, czy komukolwiek innemu udało się serializować std :: shared_ptr. – denim