| 1 | #include <iostream>
|
|---|
| 2 | #include <vector>
|
|---|
| 3 | #include <fstream>
|
|---|
| 4 |
|
|---|
| 5 | #include <boost/serialization/vector.hpp>
|
|---|
| 6 | #include <boost/archive/xml_oarchive.hpp>
|
|---|
| 7 | #include <boost/archive/xml_iarchive.hpp>
|
|---|
| 8 |
|
|---|
| 9 | struct dummy {
|
|---|
| 10 | template<class Archive>
|
|---|
| 11 | void serialize(Archive& ar, unsigned int version) {}
|
|---|
| 12 | };
|
|---|
| 13 |
|
|---|
| 14 | int main() {
|
|---|
| 15 | // One-level container
|
|---|
| 16 | // For comparison only. This shows the expected behaviour.
|
|---|
| 17 | {
|
|---|
| 18 | std::cout << "One-level vector:" << std::endl;
|
|---|
| 19 | std::vector<dummy> l(1);
|
|---|
| 20 | dummy* pd = &l.back();
|
|---|
| 21 | {
|
|---|
| 22 | std::ofstream ofs("one_level.xml");
|
|---|
| 23 | boost::archive::xml_oarchive oa(ofs);
|
|---|
| 24 | oa << BOOST_SERIALIZATION_NVP(l) << BOOST_SERIALIZATION_NVP(pd);
|
|---|
| 25 | }
|
|---|
| 26 | {
|
|---|
| 27 | std::ifstream ifs("one_level.xml");
|
|---|
| 28 | boost::archive::xml_iarchive ia(ifs);
|
|---|
| 29 | ia >> BOOST_SERIALIZATION_NVP(l) >> BOOST_SERIALIZATION_NVP(pd);
|
|---|
| 30 | }
|
|---|
| 31 | std::cout << &l.back() << " " << pd << std::endl;
|
|---|
| 32 | }
|
|---|
| 33 |
|
|---|
| 34 | std::cout << std::endl;
|
|---|
| 35 |
|
|---|
| 36 | // Two-level container
|
|---|
| 37 | // This is buggy.
|
|---|
| 38 | {
|
|---|
| 39 | std::cout << "Two-level vector:" <<std::endl;
|
|---|
| 40 | std::vector<std::vector<dummy>> l(1, std::vector<dummy>(1));
|
|---|
| 41 | dummy* pd = &l.back().back();
|
|---|
| 42 | std::cout << pd << std::endl;
|
|---|
| 43 | {
|
|---|
| 44 | std::ofstream ofs("two_level.xml");
|
|---|
| 45 | boost::archive::xml_oarchive oa(ofs);
|
|---|
| 46 | oa << BOOST_SERIALIZATION_NVP(l) << BOOST_SERIALIZATION_NVP(pd);
|
|---|
| 47 | }
|
|---|
| 48 | {
|
|---|
| 49 | std::ifstream ifs("two_level.xml");
|
|---|
| 50 | boost::archive::xml_iarchive ia(ifs);
|
|---|
| 51 | ia >> BOOST_SERIALIZATION_NVP(l) >> BOOST_SERIALIZATION_NVP(pd);
|
|---|
| 52 | }
|
|---|
| 53 | std::cout << &l.back().back() << " " << pd << std::endl;
|
|---|
| 54 | }
|
|---|
| 55 |
|
|---|
| 56 | return 0;
|
|---|
| 57 | }
|
|---|
| 58 |
|
|---|