Boost logo

Boost Users :

Subject: Re: [Boost-users] [serialization] Serializing array of POD or custom type
From: Kim Gadecki (gadecki_at_[hidden])
Date: 2012-06-26 08:35:49


On 6/26/2012 3:56 PM, Krzysztof Czainski wrote:
> 2012/6/26 Kim Gadecki <gadecki_at_[hidden] <mailto:gadecki_at_[hidden]>>
>
> Hi everyone.
>
> I'm trying to work out how you serialize arrays using the boost
> serializer. Here's a simplified example:
>
> struct node_link
> {
> u32 node_A;
> u32 node_B;
> };
>
> struct Node {
> node_link* m_node_links_array;
> int m_node_links_size;
> };
>
> // non-intrusive serialization
> template<class Archive>
> void serialize(Archive & ar, node_link& link, const
> unsigned int version)
> {
> ar & link.node_A;
> ar & link.node_B;
> }
>
> template<class Archive>
> void serialize(Archive & ar, Node& node_data, const
> unsigned int version)
> {
> ar &
> boost::serialization::array<node_link>(node_data.m_node_links_array,
> node_data.m_node_links_size);
> ar & node_data.m_node_links_size;
> }
>
>
> I'm guessing: how is deserialization of an array supposed to work, if
> size is deserialized afterwords?
>
> Regards
> Kris

Right you are. It also looks like you need to manually allocate memory
for the array:

             ar & node_data.m_node_links_size;
             node_data.m_node_links_array = new
node_link[node_data.m_node_links_size];
             ar &
boost::serialization::array<node_link>(node_data.m_node_links_array,
node_data.m_node_links_size);

So I'll have to split save and load to take care of that.

Thanks.



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net