
I looked into this a little bit. First I can see the the friend ...access will only work for intrusive serialization. But I can see that it's straight forward to just make the free save/load functions friend templates - EXCEPT that not all compilers do this. Sooo here is what I had to do to sneak it past my msvc 7.1 compiler. Robert Ramey ////////////////////////////////////////////////////////////////////////////////////// #include <boost/config.hpp> #include <boost/serialization/split_free.hpp> class CMyObject { #ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS private: friend template<class Archive> void save(Archive & ar, const CMyObject& t, unsigned int version); friend template<class Archive> void load(Archive & ar, CMyObject& t, unsigned int version); #else public: #endif int m_nPrivateData; public: CMyObject(void) : m_nPrivateData(123) { } ~CMyObject(void) { } }; BOOST_SERIALIZATION_SPLIT_FREE(CMyObject) ////////////////////////////////////////////////////////////////////////////////////// #include <boost/archive/xml_oarchive.hpp> #include <boost/archive/xml_iarchive.hpp> namespace boost { namespace serialization { template<class Archive> void save(Archive & ar, const CMyObject& t, unsigned int version) { ar << boost::serialization::make_nvp("CMyObject", t.m_nPrivateData); } template<class Archive> void load(Archive & ar, CMyObject& t, unsigned int version) { ar >> boost::serialization::make_nvp("CMyObject", t.m_nPrivateData); } }} // boost and serialization namespaces #include <fstream> int main(int argc, char *argv[]){ std::ifstream is; boost::archive::xml_iarchive ia(is); CMyObject obj; ia >> BOOST_SERIALIZATION_NVP(obj); }