sudo apt-get update
To get the Boost Serialization library:
sudo apt-get install libboost-serialization-dev
I'm using:
libboost-serialization-dev version 1.34.1-4ubuntu3
g++ version 4.2.4-1ubuntu3
In main.cpp:
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/access.hpp>
#include <boost/serialization/base_object.hpp>
#include <fstream>
using namespace std;
class Actor
{
public:
Actor( void ) {}
Actor( char gender )
: gender( gender )
{}
char Gender( void ) const { return gender; }
private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & gender;
}
char gender;
};
void save( const Actor& actor, string filename )
{
ofstream ofs( filename.c_str() );
boost::archive::text_oarchive oa( ofs );
oa & actor;
}
void load( Actor& actor, string filename )
{
ifstream ofs( filename.c_str() );
boost::archive::text_iarchive ia( ofs );
ia & actor;
}
void testBoostSerialization( void )
{
Actor actorAlpha( 'm' );
Actor actorBravo( 'f' );
// save
string filename = "sav.sav";
save( actorAlpha, filename );
// test
assert( actorBravo.Gender() == 'f' );
// load
load( actorBravo, filename );
// test
assert( actorBravo.Gender() == 'm' );
}
int main( int argc, const char* argv[] )
{
testBoostSerialization();
return EXIT_SUCCESS;
}
In Makefile (remember to put a real tab before where it says 'g++'):
all:
g++ -g -Wall testBoostSerializationInheritance.cpp -lboost_serialization
Error you may encounter 1:
/usr/include/boost/archive/detail/oserializer.hpp:566: error: invalid application of ‘sizeof’ to incomplete type ‘boost::STATIC_ASSERTION_FAILURE<false>
To fix this error, make sure that you only pass const objects boost::archive::text_oarchive.
Error you may encounter 2:
terminate called after throwing an instance of 'boost::archive::archive_exception'
what(): invalid signature
Aborted
To fix this error, make sure that you have only one of either boost::archive::text_oarchive or boost::archive::text_iarchive created at a time.
No comments:
Post a Comment