Hello all
I'm trying to serialize a std::map along with some pointers that are referencing
onto some of the Value elements of that map. What I see now, is that those
references are not loaded correctly. Here's what I do:
#include <sstream>
#include
#include
#include
struct dummy
{
template<typename Archive>
void serialize(Archive & ar, const unsigned int version)
{
}
};
struct map_ref_test
{
std::map m;
dummy * ref;
template<typename Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & m;
ar & ref;
}
};
int main()
{
std::ostringstream os;
map_ref_test m;
m.m[0] = dummy();
m.m[1] = dummy();
m.m[2] = dummy();
m.ref = &(m.m[1]);
// serialize
boost::archive::text_oarchive out(os);
out << const_cast(m);
// De-serialize
map_ref_test m2;
std::string ser = os.str();
std::istringstream is(ser);
boost::archive::text_iarchive in(is);
in >> m2;
std::cout << "0: " << &m.m[0] << std::endl;
std::cout << "1: " << &m.m[1] << std::endl;
std::cout << "2: " << &m.m[2] << std::endl;
std::cout << "ref: " << m.ref << std::endl;
std::cout << "0: " << &m2.m[0] << std::endl;
std::cout << "1: " << &m2.m[1] << std::endl;
std::cout << "2: " << &m2.m[2] << std::endl;
std::cout << "ref: " << m2.ref << std::endl;
}
This creates the following output:
0: 0x805bfc4
1: 0x805bfe4
2: 0x805c004
ref: 0x805bfe4
0: 0x805ca04
1: 0x805ca24
2: 0x805ca44
ref: 0xbfacad5c
I'd expect the last line to read:
ref: 0x805ca24
So, what am I doing wrong? Should this even work?
BTW: I'm using Boost 1.33.1
Thanks a lot!
Bernhard