
I've spent a tiny amount of time looking over the flyweight documentation and some code and I have a couple minor observations along with a really dumb question. a) when I see boost::flyweight::flyweights it confuses me. I suppose its no big deal. b) I'm curious about the serialization implementation. Why didn't you choose just to serialize the factory? This seems to me the most obvious implementation and I wonder why you didn't feel it was a good choice. template< class Archive, typename T,typename Arg1,typename Arg2,typename Arg3
void serialize( Archive& ar,const ::boost::flyweights::flyweight<T,Arg1,Arg2,Arg3>& f, const unsigned int version) { typedef ::boost::flyweights::flyweight<T,Arg1,Arg2,Arg3> flyweight; ar & flyweight::factory(); // serialization tracking guarentees only one copy ar & f.h; // serialization tracking optimizes down to an integer object id } This might not be a good idea if flyweight reference count isn't used. So another idea might be: template< class Archive, typename T,typename Arg1,typename Arg2,typename Arg3
void save( Archive& ar,const ::boost::flyweights::flyweight<T,Arg1,Arg2,Arg3>& f, const unsigned int version) { typedef ::boost::flyweights::flyweight<T,Arg1,Arg2,Arg3> flyweight; ar << f.h; // serialization tracking optimizes down to an integer object id } template< class Archive, typename T,typename Arg1,typename Arg2,typename Arg3
void load( Archive& ar,const ::boost::flyweights::flyweight<T,Arg1,Arg2,Arg3>& f, const unsigned int version) { typedef ::boost::flyweights::flyweight<T,Arg1,Arg2,Arg3> flyweight; T t; ar >> t; // serialization tracking optimizes down to an integer object id f.factory.insert(t); // or something along those lines //fix up object address of t - off hand I don't remember the syntax } In short, I don't see why a "helper" is required. Robert Ramey