$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-users] [serialization] : compile problem
From: Kaz (sfx810_at_[hidden])
Date: 2011-08-20 11:53:25
Hi All,
I am trying to compile this code to test boost serialization, however
I am getting this error
 Error 5 error C2664: 'boost::mpl::assertion_failed' : cannot convert
parameter 1 from 'boost::mpl::failed
************boost::serialization::is_wrapper<T>::* ***********' to
'boost::mpl::assert<false>::type' c:\program files
(x86)\boost\boost_1_46_1\boost\archive\basic_xml_oarchive.hpp 92
I am using boost 1.46.1, visual studio c++ 2010 express.
Any help will be appreciated.
Thanks,
Kaz
 //-----------------------------------------------------------------------------------------------------------
 #include <string>
#include <boost/serialization/vector.hpp>
#include <boost/serialization/list.hpp>
#include <boost/archive/xml_iarchive.hpp>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/archive/tmpdir.hpp>
#include <fstream>
class Base
{
        friend class boost::serialization::access;
        template<typename archive>
        void serialize( archive& ar, const unsigned int version )
        {
                ar &
                        BOOST_SERIALIZATION_NVP(a) &
                        BOOST_SERIALIZATION_NVP(c) &
                        BOOST_SERIALIZATION_NVP (strBase);
        }
public:
        Base( int a_arg, char c_arg ) : a( a_arg ), c ( c_arg )
        {		strBase = "This is base";	}
        int a;
        char c;
        std::string strBase;
};
//-------------------------------------
BOOST_SERIALIZATION_ASSUME_ABSTRACT(Base)
//-------------------------------------
class Child : public Base
{
        friend class boost::serialization::access;
        template<typename archive>
        void serialize( archive& ar, const unsigned int version )
        {
                ar & boost::serialization::base_object<Base>(*this);
                ar & BOOST_SERIALIZATION_NVP(f) & BOOST_SERIALIZATION_NVP(strChildName);
        }
public:
        Child() : Base(0,'c'), f(3.3417)
        {	strChildName = "This is Child";  }
        float f;
        std::string strChildName;
};
//-------------------------------------
class BaseContainer
{
        typedef Base* BasePtr;
        std::vector<BasePtr> BaseVec;
        friend class boost::serialization::access;
        template<typename archive>
        void serialize( archive& ar, const unsigned int version )
        {
                ar.register_type<Base>();
                ar.register_type<Child>() ;
                ar & BaseVec;
        }
        public:
        BaseContainer()	{}
        void Init()
        {
                for(int i = 0; i < 10; ++i )
                {
                if ( i < 5 )		
                        BaseVec.push_back( new Base(i,'b') );
                else
                        BaseVec.push_back( new Child() );
                }
        }	
};
//-------------------------------------
int main()
{
        std::string filename="demo.xml";
        BaseContainer baseContainer;
        baseContainer.Init();
        {
                std::ofstream ofile(filename);
                boost::archive::xml_oarchive out(ofile);		
                out << BOOST_SERIALIZATION_NVP(baseContainer);
        }
        return 0;
}
//-------------------------------------