#include #include #include #include #include #include #include #include class A { public: A() {} virtual std::string toString(void) const =0; private: friend class boost::serialization::access; template void serialize(Archive& ar, const unsigned int version) { } }; class B : public A { public: B() { } explicit B(int i) : m_i(i) { } std::string toString(void) const { std::ostringstream oss; oss << "B = " << m_i; return oss.str(); } private: friend class boost::serialization::access; template void serialize(Archive& ar, const unsigned int version) { ar & boost::serialization::base_object(*this); ar & m_i; } int m_i; }; class C : public A { public: C() { } explicit C(double d) : m_d(d) { } std::string toString(void) const { std::ostringstream oss; oss << "C = " << m_d; return oss.str(); } private: friend class boost::serialization::access; template void serialize(Archive& ar, const unsigned int version) { ar & boost::serialization::base_object(*this); ar & m_d; } double m_d; }; int main() { boost::serialization::void_cast_register( static_cast(NULL), static_cast(NULL) ); boost::serialization::void_cast_register( static_cast(NULL), static_cast(NULL) ); std::list l; { std::ifstream ifs("filename"); boost::archive::text_iarchive ia(ifs); ia.register_type(static_cast(NULL)); ia.register_type(static_cast(NULL)); try { ia >> l; } catch(std::exception& ex) { std::cout << ex.what() << std::endl; } } return 0; }