Boost logo

Boost Users :

From: gast128 (gast128_at_[hidden])
Date: 2007-08-13 11:08:00


Dear all,

I was trying to use the Boost Serialization library again, but I ran into a
problem which cost me a full day. The Boost Serialization library is a very
handy library, but often when I use it I run into problems which cost me days.

This time I try to serialize just 'track_never' objects. First of all the
compiler firewall which is built in the library does not work when using the
nvp macro:

void Foo()
{
   boost::archive::xml_oarchive oa(...)
 
   SomeStruct s;
   oa << s; // compile time error
   oa << BOOST_SERIALIZATION_NVP(s); //ok
}

But this wasn't the real problem. I was looping to serialize non tracking
objects:

void Bla()
{
   boost::archive::xml_oarchive oa(...)
 
   for (int i = 0; i < 1000; ++i)
   {
      const SomeStruct s;
      oa << s;
   }
}

However the library did track them by pointer due to a previous request to
serialize a pointer. It decides this on a call
to 'basic_serializer::serialized_as_pointer' deep in the library.

struct SomeStructHolder
{
  SomeStructHolder() : m_p(NULL){}

  template <class Archive>
  void serialize(Archive& ar, const unsigned int /*version*/)
  {
     ar & BOOST_SERIALIZATION_NVP(m_p);
  }

  const SomeStruct* m_p;
};

somewhere else:

void Bla()
{
   boost::archive::xml_oarchive oa(...)
 
   const SomeStructHolder holder;
   oa << holder;
}

So this is again an unexpected property of the library. Maybe the ambition for
automatic object tracking is too high, and specify it explicitly per class /
per archiving operation would be more work for the user, but also clearer.

And still the original problem was too find out if Boost Serialization could
also be used on a per demand loading of (value-)objects: in my problem the
final storage can be potential bigger than computer memory, so I was wondering
if objects could be loaded on demand (instead of all in once).

wkr,
me


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