2013-02-20 24 views
10

Hallo jemand hat schon geschafft, ein C++ 11 std :: shared_ptr mit boost :: serialisierung zu serialisieren. Es gibt viele veraltete Beiträge, aber keine mit einer akzeptablen Lösung. Ich gehe nicht in die Diskussion, warum ich die std :: shared_ptr einfach verwenden möchte!C++ 11 std :: shared_ptr + boost :: serialisierung

Ich fand diesen anderen Beitrag: boost serialize and std::shared_ptr aber es beantwortet nicht mein Problem, wie man das std :: shared_ptr serialisiert es schlägt nur vor, das boost :: shared_ptr zu verwenden, das in meinem Fall nicht möglich ist.

Und dieser Beitrag How can boost::serialization be used with std::shared_ptr from C++11? empfiehlt auch nur boost :: shared_ptr zu verwenden.

Ich wäre interessiert, wenn jemand bereits eine Arbeit gefunden hat, die es schafft, die std :: shared_ptr zu serialisieren.

Hey Leute, ich habe endlich eine Lösung für mein Problem gefunden siehe https://stackoverflow.com/a/14999396/2039157 für meine Antwort.

+0

Convert std :: shared_ptr zu boost :: shared_ptr für Serialisierung. – ForEveR

+0

Ja, ich würde sagen, wenn 'boost :: shared_ptr' eine Option ist, ist dies die Antwort: http://StackOverflow.com/Questions/9944274/Boost-serialize-and-Stdshared-Ptr – jogojapan

+0

Hm, was genau meinst du mit konvertieren? Ich hoffe, Sie wollen nicht das std :: shared_ptr durch boost :: shared_ptr ersetzen;) Bitte geben Sie ein Beispiel, wie die Konvertierung funktionieren sollte. – denim

Antwort

0

Ist es nicht möglich, "nur" einen Serializer zu erstellen < < und Deserializer >> das wird "nur" die shptr-Serialisierung in Objekt-Zeiger Serialisierung? Wenn noch nicht geschehen, bin ich mir fast sicher, dass dies in < 100 Zeilen Code möglich ist.

Auch ich weiß, dass Sie nicht fragen angegeben haben, aber dennoch werde ich: Wenn Sie versuchen, „X“ Variable serialisiert werden, dass shptr ist, warum können Sie nicht nur * shptr dereferenced serialisiert werden? Das scheint mir nicht genug Unterschied zu sein, um Serialisierung für Smartptrs hinzuzufügen .. Hm .. ok. Ästhetik. Aber ich denke immer noch, dass es machbar ist.

Anyways, jedoch können Sie eine weitere Wand schlagen: Wenn Sie Vererbung Klasse, und wenn Sie auf die Objekte innerhalb shptr über Zeiger auf die Basisklasse tragen, werden Sie das offensichtliche Problem, dass der Serializer wissen nicht, was eigentlich Es wird bestellt, um zu serialisieren. Aber das ist ein klassisches Problem für die Serialisierung ohne RTTI, das muss man irgendwie lösen, aber das ist nicht das Problem von shptrs.

Disclaimer: Das letzte Mal, dass ich Boost :: Serialisierung verwendet habe, war vor ein paar Jahren. Ich habe nicht wirklich versucht, shptr zu serialisieren, aber von dem, woran ich mich erinnere, war das ein recht offener Rahmen, relativ einfach für jeden benutzerdefinierten Typ zu erweitern, also nehme ich an, shptrs sind nicht besser als meine komischen Klassen, die ich verwaltet habe. zu-serialisieren :)

+2

Das Problem ist, dass das boost :: serialization-Framework eine Header-Datei "boost/serialization/shared_ptr.hpp" zur Verfügung stellt, die es ermöglicht, boost :: shared_ptr zu serialisieren und das funktioniert ziemlich werde (ich habe es versucht). Das Problem ist, dass ich std :: shared_ptr habe, das ich serialisieren muss, und es gibt keine spezielle Kopfzeile in der boost :: serialization lib, die das std :: shared_ptr behandelt. Ich wollte also wissen, ob es irgendjemandem gelungen ist, ein std :: shared_ptr zu serialisieren. – denim