
Peter Dimov wrote:
Martin Wille wrote:
Usage example:
// udt.hpp struct udt { }; std::ostream &operator<<(std::ostream &, udt const &); std::istream &operator>>(std::istream &, udt const &);
// someclass.hpp #include "udt.hpp" #include <boost/serialization.hpp>
struct someclass { template<typename Archive> void serialize(Archive &ar, const unsigned int version) { ar & boost::serialization::lexical_cast<std::string>(my_udt); }
private: udt my_udt; };
This puts the serialization support for udt at the wrong level. If you have twelve classes that have four udt members each, you'll have to repeat "boost::serialization::lexical_cast<std::string>()" 48 times. And vector<udt> will still not work.
It's better to define load+save for udt.
This wasn't the case for my code, which used each udt only once.
If you do that, you'll see that the proposed wrapper adds almost no value. The 'almost' part comes from track_never, which enables you to sidestep the usual problem of serializing temporaries. :-)
With the lexical_cast wrapper you can do: template <typename Archive> void serialize(Archive &ar, udt &my_udt, unsigned int version) { ar & boost::serialization::lexical_cast<std::string>(my_udt); } IMHO, this is still better than spelling out the load/save functions. Thanks for your comments, m Send instant messages to your online friends http://au.messenger.yahoo.com