
Robert Ramey wrote:
It certainly should - send me a code snippet. The package includes tests of
If I change this to use text_i/o archive then it works fine, but with XML, m_Version is set to zero when writing, but set to 3 when reading (this is with latest trunk from just before branch for release yesterday morning). Also, if I provide a version number for the class of anything but 0 then it works find (e.g. 1) but 0 or no version lead to the ambiguity (running under borland bcc32 5.6.4) #include <fstream> #include <iostream> #include <boost/archive/xml_iarchive.hpp> #include <boost/archive/xml_oarchive.hpp> class Test_c { public: Test_c(void) : m_Version(99999999) { } template <typename ArchiveT> void serialize(ArchiveT& ar, const unsigned int version) { m_Version = version; } unsigned int m_Version; }; int main(int argc, char** argv) { Test_c Test; { std::ofstream ofs("C:\\test.xml"); boost::archive::xml_oarchive toa(ofs); toa & BOOST_SERIALIZATION_NVP(Test); std::cout << "Test version = " << Test.m_Version << std::endl; } { std::ifstream ifs("C:\\test.xml"); boost::archive::xml_iarchive tia(ifs); tia & BOOST_SERIALIZATION_NVP(Test); std::cout << "Test version = " << Test.m_Version << std::endl; } return 0; }
serialization traits determine whether or not a class is versioned. Default is for non primititve types to be versioned and the default version number is 0. The usage of version number when not necessary could be a performance issue so there is the option of setting serialization traits for any type so that versioning isn't done. For example, this is not done for STL collections. Review the section of the documentation "serialization traits"
Thanks, I will do. Cheers Russell