|
Boost Users : |
Subject: [Boost-users] serialization: "derived class not registered or exported" exception , 1.45 boost
From: Hicham Mouline (hicham_at_[hidden])
Date: 2010-12-19 13:50:26
Hello,
I have moved all serialization code in a separate static library that I
called serialization. This, in my case, depends on mpi.
The headers in this static library:
1. include <boost/serialization/export.hpp>
2. include the definition of the derived class being serialized
3. declare a template function serialize() that takes a reference to
the derived class being serialized in the boost::serialization namespace
4. invoke the BOOST_CLASS_EXPORT_KEY(<derivedclass>) macro at the
global namespace scope
The corresponding source files in this static library:
1. include the header
2. define the function template serialize()
3. explicitly instantiate the serialize() function with all the
archives used: mpi::packed_iarchive and mpi::packed_oarchive in the
boost::serialization namespace
4. invoke the BOOST_CLASS_EXPORT_IMPLEMENT(<derivedclass>) macro at
the global namespace scope
The main program links against this static library, and invokes a mpi
function (broadcast) that serializes by the base pointer. The base class is
polymorphic. All class derivations are public.
Debugging, the code reaches : archive/detail/oserializer.hpp
boost::archive::detail::save_pointer_type<boost::mpi::packed_oarchive>::poly
morphic::save<baseclass>(boost::mpi::packed_oarchive & ar={...}, baseclass&
t={...}) Line 400 + 0x38 bytes
where NULL==true_type
However, looking at the t argument of save(), it shows that is the correct
derived object. But the type T is the base class.
What am I missing?
regards,
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net