Hello,
thanks for help with this. This has
fixed the problem. However, I have got a much more complicated example
which fails.
I have a simple inheritance structure
with 4 classes, they derive a->b->c->d nothing complex. say a
is the mose base and d is the most derived class, Each class has got a
virtual destructor. I can easily serialize object of type d but I cannot
do this with a pointer to a this class. Basicaly invoking in the code
std::vector<b*>
tmpCcys;
ar
& boost::serialization::make_nvp("currencyEvents",
tmpCcys);
does not work at all! I can get to
the point
// retrieve
the true type of the object pointed to
// if this
assertion fails its an error in this library
assert(NULL != this_type);
const
boost::serialization::extended_type_info * true_type =
i.get_derived_extended_type_info(t);
// note:if
this exception is thrown, be sure that derived pointer
// is either
registered or exported.
if(NULL
== true_type){
boost::serialization::throw_exception(
archive_exception(
archive_exception::unregistered_class,
true_type->get_debug_info()
)
);
}
in the oserializer.hpp where each element
of the vector is dumped to the archive but call to i.get_derived_extended_type_info(t)
throws an exception of an unknown type. It is not archive or event std::exception
onlt catch(...) {...} can handle it and therefore it is not possible to
see what is going on. The data under t looks fine but
const
extended_type_info *
get_derived_extended_type_info(const
T & t) const
{
//
note: this implementation - based on usage of typeid (rtti)
//
only does something if the class has at least one virtual function.
BOOST_STATIC_WARNING(boost::is_polymorphic<T>::value);
return
typeid_system::extended_type_info_typeid_0::get_extended_type_info(
typeid(t)
);
}
simply throws something which is not
possible to handle correctly. I cannot step into typeid(t) on windows and
VC++2005. As mentioned i have no problems at all with serializing object.
Serializing pointers deos not work att all! I am exporting the class using
BOOST_CLASS_EXPORT_GUID(d, "CurrencyEvent")
I have to mention that the most base
class is a template and I export it as well using
BOOST_CLASS_EXPORT_GUID(a<Currency>,
"EventCurrency")
BOOST_CLASS_EXPORT_GUID(a<CurrencyCouple>,
"EventCurrencyCouple")
similar
BOOST_CLASS_EXPORT_GUID(b, "BaseCurrencyEvent")
BOOST_CLASS_EXPORT_GUID(c, "RealCurrencyEvent")
the classes a,b,c and d are within
a namespace Events and defined/declared within a dll but this should not
be a problem at all since I can serialize objects of the most derived class.
Could someone help me with this issue?
Thanks a lot in advance
___________________________________________________________
This e-mail may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and delete this e-mail. Any unauthorised copying, disclosure or distribution of the material in this e-mail is prohibited.
Please refer to http://www.bnpparibas.co.uk/en/information/legal_information.asp?Code=ECAS-845C5H for additional disclosures.