$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
From: Terence Wilson (tez_at_[hidden])
Date: 2005-12-24 02:52:47
I am an MFC veteran that wants to use a more modern mechanism for archival,
in MFC a base pointer can be written and the object recreated automatically
upon the read. I've been reading the serialization documentation and I am
very confused about what I need to do to make this work using Boost, the
code I have so far fails to compile with a static assert in the save
function in oserializer.hpp.
 
class CMyClassBase
{
public:
         CMyClassBase():m_TagBase(0){}
        virtual ~CMyClassBase(){}
        int m_TagBase;
        friend class boost::serialization::access;
        template<class Archive> void serialize(Archive & ar, const unsigned
int /* file_version */)
        {
                ar & m_TagBase;
        }
};
class CMyClassDerived : public CMyClassBase {
public:
        CMyClassDerived():m_TagDerived(1){}
        virtual ~CMyClassDerived(){}
        int m_TagDerived;
        friend class boost::serialization::access;
        template<class Archive> void serialize(Archive & ar, const unsigned
int /* file_version */)
        {
                boost::serialization::base_object<CMyClassBase>(*this);
                ar & m_TagDerived;
        }
};
BOOST_CLASS_EXPORT_GUID(CMyClassDerived, "CMyClassDerived")
void save_myclass(CMyClassBase* pMyClassBase, const char * filename){
        // make an archive
        std::ofstream ofs(filename);
        boost::archive::text_oarchive oa(ofs);
        oa << pMyClassBase;
}
void
restore_myclass(CMyClassBase* pMyClassBase, const char * filename) {
        // open the archive
        std::ifstream ifs(filename);
        boost::archive::text_iarchive ia(ifs);
        // restore the schedule from the archive
        ia >> pMyClassBase;
}