|
Boost : |
Subject: [boost] [serialization] "stream error" when port from boost_1.33 to boost_1.36
From: ipangth (ipangth_at_[hidden])
Date: 2008-09-25 08:53:00
I just port a project using boost_1.33_1 to use boost_1.36.
The project has a Server class using a std::set<Server> serialization,
the serialization save and load functions code see behind.
I use gcc 4.1 and run on FC6.
The porting problem is, when the old boost_1.33 generates(save) a xml file,
then use boost_1.36 load the xml throws an exception "stream error"!
the exception error code line : boost::archive::xml_iarchive ia(ifs);
How can i sovle it?
class Server
{
public:
int id;
std::string ip;
int port;
private:
static std::set<Server> lst_;
static int dirty_;
};
#endif
#ifdef USE_SERVER_SERIALIZATION
#ifndef _SERVER_SERIALIZATION_
#define _SERVER_SERIALIZATION_
BOOST_CLASS_VERSION(Server, 1)
namespace boost {
namespace serialization {
template <class archive>
void serialize(archive & ar, Server & t, const unsigned int ver)
{
ar & BOOST_SERIALIZATION_NVP(t.id);
ar & BOOST_SERIALIZATION_NVP(t.ip);
ar & BOOST_SERIALIZATION_NVP(t.port);
}
}
}
#endif
#endif
int Server::save( const std::string & file)
{
try {
std::ofstream ofs(file.c_str(), std::ios::binary);
{
boost::archive::xml_oarchive oa(ofs);
oa << BOOST_SERIALIZATION_NVP(lst_);
}
} catch(...) {
return ERROR_ERROR;
}
return ERROR_SUCCEED;
}
int Server::load(const std::string & file)
{
std::set<Server> Server::lst_;
try
{
std::ifstream ifs(file.c_str(), std::ios::binary);
{
boost::archive::xml_iarchive ia(ifs);
ia >> BOOST_SERIALIZATION_NVP(lst_);
}
}
catch(std::exception & e)
{
std::cout << e.what() << std::endl;
}
return 0;
}
-- Best regards, PangYongQiang
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk