////////////////////////////////////////////// // ---------------> Message #include #include #include class Message { friend class boost::serialization::access; public: Message() : type(123) { } virtual ~Message(){ } virtual void virtualfunc () = 0; private: int type; template void serialize(Archive& x, const unsigned int version){ x & type; } }; BOOST_SERIALIZATION_ASSUME_ABSTRACT(Message); ////////////////////////////////////////////// // ----------------> MessageTimer #include using std::string; class MessageTimer : public Message { friend class boost::serialization::access; public: MessageTimer(int x) : event(x){ } MessageTimer() : event(0){ } virtual ~MessageTimer(){ } virtual void virtualfunc(){ } private: int event; template void serialize(Archive& y, const unsigned int version){ boost::serialization::base_object(*this); boost::serialization::void_cast_register (); y & event; } }; ////////////////////////////////////////////// // ----------------> Serialization #include #include #include #include #include #include #include #include #include #include #include ///////// COMMENT THE NEXT LINE TO MAKE IT COMPILE!!! BOOST_CLASS_EXPORT(MessageTimer); /////////////////////////////////////////////////////// BOOST_CLASS_TRACKING(MessageTimer, boost::serialization::track_never); int main(){ Message* msg = new MessageTimer( 5 ); std::stringstream archiveStream (std::ios_base::binary | std::ios_base::out); { boost::archive::polymorphic_binary_oarchive outputArchive (archiveStream); outputArchive & msg; } string data= archiveStream.str (); std::cout << data << std::endl; return 0; }