[Boost-bugs] [Boost C++ Libraries] #5368: Item for "Tips and Tricks" list in dokumentation

Subject: [Boost-bugs] [Boost C++ Libraries] #5368: Item for "Tips and Tricks" list in dokumentation
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2011-03-24 08:55:36


#5368: Item for "Tips and Tricks" list in dokumentation
----------------------------------+-----------------------------------------
 Reporter: schorsch_76@… | Owner: ramey
     Type: Patches | Status: new
Milestone: To Be Determined | Component: serialization
  Version: Boost Release Branch | Severity: Optimization
 Keywords: Boost 1.46.1 |
----------------------------------+-----------------------------------------
 How to handle BOOST_CLASS_EXPORT_KEY/BOOST_CLASS_EXPORT_IMPLEMENT in
 several static libraries and avoid linking errors?

 == Make Header Archive.h ==
 Make a Header "Archive.h". Include Everything for your serialization here.
 Example:
 {{{
 #!div style="font-size: 80%"
 Code highlighting:
 :
 {{{#!C
 #ifndef __Archive_h__
 #define __Archive_h__

 // STL Archive + stuff
 #include <boost/serialization/export.hpp>
 #include <boost/serialization/base_object.hpp>
 #include <boost/serialization/list.hpp>
 #include <boost/serialization/map.hpp>
 #include <boost/serialization/vector.hpp>
 #include <boost/serialization/shared_ptr.hpp>

 // IMPORTANT: Archive Headers at last
 // include headers that implement a archive in xml format
 #include <boost/archive/archive_exception.hpp>

 #include <boost/archive/xml_oarchive.hpp>
 #include <boost/archive/xml_iarchive.hpp>

 typedef boost::archive::xml_oarchive oarchive;
 typedef boost::archive::xml_iarchive iarchive;

 #endif // __Archive_h__
   }}}
 }}}

 == Define your classes as following ==

 Myclass.h
 {{{
 #!div style="font-size: 80%"
 Code highlighting:
 :
 {{{#!C


 #include "Archive.h"

 class Myclass
 {
 public:
         Myclass();
         ~Myclass();

         double md_data;

 private:
     friend class boost::serialization::access;

     // When the class Archive corresponds to an output archive, the
     // & operator is defined similar to <<. Likewise, when the class
 Archive
     // is a type of input archive the & operator is defined similar to >>.
     template<class Archive>
     void serialize(Archive & ar, const unsigned int version)
     {
                 ar & BOOST_SERIALIZATION_NVP(md_data;);
     }
 };

 BOOST_CLASS_VERSION(Myclass, 0)
 BOOST_CLASS_EXPORT_KEY(Myclass)
   }}}
 }}}

 == Implementationfile of your class ==
 Myclass.cpp
 {{{
 #!div style="font-size: 80%"
 Code highlighting:
 :
 {{{#!C


 Myclass::Myclass()
 {
 }

 Myclass::~Myclass()
 {
 }
 BOOST_CLASS_EXPORT_IMPLEMENT(Myclass)
   }}}
 }}}


 == Conclusion ==
 Thats the way i made it working in my project with VC10 and boost 1.46.1 .
 My project consists of several static libraries which have dependencies
 under each other. Main dependency is the library which contains the
 serializable classes.

 Hopefully this will help some people :-)

 Best Regards

 Georg

-- 
Ticket URL: <https://svn.boost.org/trac/boost/ticket/5368>
Boost C++ Libraries <http://www.boost.org/>
Boost provides free peer-reviewed portable C++ source libraries.

This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:06 UTC