I have the following code serialising
shared_ptr's to fstream and reading them back correctly. When I switch
to using a stringstream (invert comments) I get a null value in "str"
following serialisation. I noticed someone had a similar issue previously
and solved it (but didn't explain how). Serialising/de-serialising between
stringstream works fine when the iostreams are avoided.
Could someone point out what I'm doing
wrong please?
Regards,
John
Using boost_1_33_1 on vc++2005 (8.0)
// test.cpp : Defines the entry point for
the console application.
//
#include "stdafx.h"
#include <boost/archive/xml_oarchive.hpp>
#include <boost/archive/xml_iarchive.hpp>
/*//*/#include
<fstream>
//#include <sstream>
#include <iostream>
#include <boost/serialization/vector.hpp>
#include <boost/serialization/shared_ptr.hpp>
#include <boost/iostreams/filtering_stream.hpp>
#include <boost/iostreams/filter/gzip.hpp>
struct simple
{
simple() : i_(1){}
simple(int
i) : i_(i){}
int
i_;
template<class
Archive>
void
serialize(Archive & ar, const
unsigned int
version)
{
ar & BOOST_SERIALIZATION_NVP(i_);
}
};
int _tmain(int
argc, _TCHAR* argv[])
{
//std::string
str;
{
boost::shared_ptr<simple> s(new
simple(2));
std::vector<boost::shared_ptr<simple> > vec;
for (int
j = 0; j < 100; j++)
{
vec.push_back(s);
}
/*//*/std::ofstream
os("c:/test_ser_shared_ptr.xml",
std::ios_base::binary);
//std::ostringstream os;
boost::iostreams::filtering_ostream out;
out.push(boost::iostreams::gzip_compressor());
out.push(os);
boost::archive::xml_oarchive oa(out);
oa & BOOST_SERIALIZATION_NVP(vec);
//str = os.str();
}
{
std::vector<boost::shared_ptr<simple> > vec;
/*//*/std::ifstream
is("c:/test_ser_shared_ptr.xml",
std::ios_base::binary);
//std::istringstream is(str);
boost::iostreams::filtering_istream in;
in.push(boost::iostreams::gzip_decompressor());
in.push(is);
boost::archive::xml_iarchive ia(in);
ia & BOOST_SERIALIZATION_NVP(vec);
int i
= (*(vec.begin()))->i_;
}
return
0;
}
---
This e-mail may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and delete this e-mail. Any unauthorized copying, disclosure or distribution of the material in this e-mail is strictly forbidden.
Please refer to http://www.db.com/en/content/eu_disclosures.htm for additional EU corporate and regulatory disclosures.