
Joel de Guzman wrote:
Robert Ramey wrote:
And here's another idea.
create an archive adaptor which takes any archive and replaces its loading of primitives to something that just throws them away.
so at some point one would try
load(Archive & ar, Y & y, const unsigned version){ ar >> x; if(version == 1){ dummy_archive<Archive> da(ar); da >>y; } ar >> z; }
I havn't written documentation on archive adaptor but polymorphic_?archives are examples of such a thing.
Clever! But again, what if Y is already obsolete at version 2?
LOL - once an object of class Y is stored in an archive and kept around - by definition - it can't be obsolete. Obsolete suggests it will never be used - archiving suggest it will be. One might work around this with something like: void save(Archive & ar, const A &a, const unsigned version){ assert(1 == version); ar << x; ar << sizeof(y); ar << y; ar << z; } void load(Archive & ar, const A &a, const unsigned version){ std::size_t s; ar >> x; ar << s; if(1 == version){ // skip over stream s bytes } ar << z; } Of course the current archive concept doesn't include the stream and archives aren't guarenteed to have them. So the skip operation would have to be added to the archive itself either by making an archive adaptor that could be applied to any archive with a stream. Robert Ramey