Boost logo

Boost Users :

From: Robert Ramey (ramey_at_[hidden])
Date: 2006-04-04 11:27:13


Looks like a compiler bug to me.

You might try the BOOST_CLASS_EXPORT method.

You might try the alternative registration syntax:

ar.template register_type<FloatParameter>(); ...

You might ask microsoft - lol

Other than that I'm not sure what to suggest.

Robert Ramey

Sigurd Saue wrote:
> We've started to use boost serialization and I've run into problems
> with serialization of derived classes. The "funny" thing is that this
> happens only on 64-bit Windows release compiled with MS Visual 2005.
> The same code works fine on Linux 32/64 bit debug/release, on Windows
> 32-bit debug/release and on Windows 64-bit debug. But not Windows
> 64-bit release. We use boost version 1.33.1.
>
> Here's the code that causes problems (Parameter is the base class,
> ParamCollection is a vector of Parameters):
>
> template<class Archive>
> static void serialize(Archive & ar, ParamCollection & col, const
> unsigned int /*version*/)
> {
> ar.register_type(static_cast<FloatParameter*>(NULL));
> ar.register_type(static_cast<IntParameter*>(NULL));
> ar.register_type(static_cast<ChoiceParameter*>(NULL));
> ar.register_type(static_cast<StringParameter*>(NULL));
> ar.register_type(static_cast<BlobParameter*>(NULL));
>
> ar & boost::serialization::base_object<std::vector<Parameter*>
> >(col); }
>
> When serializing the ParamCollection (serializing, not deserializing)
> an archive exception is thrown: unregistered class. I've tried to use
> both abstract and non-abstract base class without any success. I did
> some research in the boost code and found that the exception was
> thrown in polymorphic::save (oserializer.hpp) by the last condition
> (NULL == bpos_ptr).
>
> Any clues? Is there a workaround?
>
> Thanks,
> Sigurd


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