serialization of vector of pointers

Hi, What is the right way to serialize/deserialize a container of pointers, e.g. std::vector< int* > ? I want to store the values, not the addresses in this case. Should I just flatten my data and store it in a different fashion, then read the flat data and build my objects with a builder? I ended up storing the size of the container in a separate variable before the data, when serializing. Then when deserializing, I use this size value to scale the container, create new ints, read their individual values via the deserialized data values and finally store them back to the new object. Can you give an example of how to do this better? cheers, --stathis

On Sat, 01 Dec 2007 08:21:47 +0100, Stathis wrote:
Hi,
What is the right way to serialize/deserialize a container of pointers, e.g. std::vector< int* > ? I want to store the values, not the addresses in this case. Should I just flatten my data and store it in a different fashion, then read the flat data and build my objects with a builder?
I think the main reason is that Boost Serialization doesn't track
pointers to the primitives. So I have a feeling you want to use
BOOST_STRONG_TYPEDEF (or whatever it is) and use a vector of those things.
Then #include

Good call - two issues a) using built-in serialization of collections b) saving a pointer to a primitive will result in untracked pointers. The proposed solution below addresses this second consideration. Robert Ramey Sohail Somani wrote:
On Sat, 01 Dec 2007 08:21:47 +0100, Stathis wrote:
Hi,
What is the right way to serialize/deserialize a container of pointers, e.g. std::vector< int* > ? I want to store the values, not the addresses in this case. Should I just flatten my data and store it in a different fashion, then read the flat data and build my objects with a builder?
I think the main reason is that Boost Serialization doesn't track pointers to the primitives. So I have a feeling you want to use BOOST_STRONG_TYPEDEF (or whatever it is) and use a vector of those things.
Then #include
and ar & vec_of_ptrs If I am not mistaken, I think the magic should take over from there.

Robert Ramey wrote:
Good call - two issues
a) using built-in serialization of collections b) saving a pointer to a primitive will result in untracked pointers. The proposed solution below addresses this second consideration.
Robert Ramey
Sohail Somani wrote:
On Sat, 01 Dec 2007 08:21:47 +0100, Stathis wrote:
Hi,
What is the right way to serialize/deserialize a container of pointers, e.g. std::vector< int* > ? I want to store the values, not the addresses in this case. Should I just flatten my data and store it in a different fashion, then read the flat data and build my objects with a builder? I think the main reason is that Boost Serialization doesn't track pointers to the primitives. So I have a feeling you want to use BOOST_STRONG_TYPEDEF (or whatever it is) and use a vector of those things.
Then #include
and ar & vec_of_ptrs If I am not mistaken, I think the magic should take over from there.
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users

On Sun, 02 Dec 2007 01:33:49 +0100, Stathis wrote:
which works, but if I change: std::list stuff; // in class A to std::list
stuff; it fails to compile.
Can you explain what is wrong with my intended use case and if possible how to do it properly? Thank you for the help.
Hi. This is why I suggested you use BOOST_STRONG_TYPEDEF. What you have done with class B is essentially what BOOST_STRONG_TYPEDEF would do. So try doing BOOST_STRONG_TYPEDEF(int,trackable_int) and use a list of *these* objects. Another option is to specialize some trait whose name escapes me. Good luck! -- Sohail Somani http://uint32t.blogspot.com

This is already built into the library. See test_list_ptr for an example how its done with std::list. std::vector should be the same. Robert Ramey Stathis wrote:
Hi,
What is the right way to serialize/deserialize a container of pointers, e.g. std::vector< int* > ? I want to store the values, not the addresses in this case. Should I just flatten my data and store it in a different fashion, then read the flat data and build my objects with a builder?
I ended up storing the size of the container in a separate variable before the data, when serializing. Then when deserializing, I use this size value to scale the container, create new ints, read their individual values via the deserialized data values and finally store them back to the new object. Can you give an example of how to do this better?
cheers, --stathis
participants (3)
-
Robert Ramey
-
Sohail Somani
-
Stathis