#include #include #include #include #include #include using namespace std; class C { public: C(int version, int size) : m_version(version), m_size(size) { array = new int[size]; for (int i = 0; i < size; ++i) array[i] = version+i; } ~C() { delete[] array; } C() {} template void save(A& a, unsigned version) const { a << m_version << m_size; a.save_binary(array, m_size*sizeof(int)); } template void load(A& a, unsigned version) { a >> m_version >> m_size; array = new int[m_size]; a.load_binary(array, m_size*sizeof(int)); } BOOST_SERIALIZATION_SPLIT_MEMBER(); friend ostream& operator<<(ostream& os, const C& c) { os << c.m_version << "{"; for(int i = 0; i < c.m_size; ++i) os << c.array[i] << " "; os << "}"; return os; } int m_version; int m_size; int* array; }; int main() { C c1(3, 4), c2(2, 2); { ofstream ofs("test.txt"); boost::archive::text_oarchive oa(ofs); cout << "Saving " << c1 << "\n"; oa << c1; //oa << 0; cout << "Saving " << c2 << "\n"; oa << c2; //oa << 0; ofs.close(); } { ifstream ifs("test.txt"); C c1, c2; int i; boost::archive::text_iarchive ia(ifs); ia >> c1; //ia >> i; cout << "Read " << c1 << "\n"; ia >> c2; //ia >> i; cout << "Read " << c2 << "\n"; } return 0; }