|
Boost Users : |
From: Joseph Hosteny (jhosteny_at_[hidden])
Date: 2006-04-30 13:32:53
On Apr 30, 2006, at 12:07 PM, Robert Ramey wrote:
> Joseph Hosteny wrote:
>> Thanks for the response. I'd have continued the thread, but I didn't
>> get the original emails from the list to reply to.
>>
>> I tried an explicit registration, with the same results. Also, I did
>> step into the code where the EXPORT macros were being called, and I
>> verified that the pertinent classes were registered in the
>> boost::serialization::detail::ktmap, at least (not sure about the
>> tkmap). It seems like it just doesn't find the class in the
>> oserialization file where the exception is thrown.
>>
>> The serialization is invoked in a const public class method, via "oa
>> << this;" Is there anything tricky you might be aware of that could
>> cause the type comparisons to fail? Could I potentially be missing
>> something in my class?
>
> I would be curious as to the context in which one would use:
>
> oa << this;
>
> I don't know that its relevant. But off hand I can't see why anyone
> would ever want to do this rather than
>
> oa << x where x is the thing we want to save.
>
>> Unfortunately, the project is quite large and it'd fairly difficult
>> to strip out everything and add it back in incrementally.
>
> Which of course makes it almost impossible for me to be of
> much help. If its a big project, you might try the following.
>
> a) create a small test program. This program would include
> the class declarations for all your classes which include
> serializaition.
>
> b) invoke serialization on each one of your classes.
>
> So the result would look like:
>
> #include <boost/archive/text_archive.hpp>
>
> #include "my_class_a.hpp"
> #include "my_class_b.hpp"
> ...
>
> int
> main(int argc, char * argv[]){
> my_class_a a_out, a_in;
> my_class_b b_out, b_in;
> {
> std::fostream ofs("test");
> boost::archive::text_oarchive oa(ofs);
> oa << a_out;
> oa << b_out;
> ...
> }
> {
> std::fistream ifs("test");
> boost::archive::text_oarchive ia(ifs);
> oa >> a_in;
> oa >> b_in;
> ...
> }
> assert(a_in == a_out);
> assert(b_in == b_out);
> ...
> }
>
> c) If some code re-factoring has to be done in order to make a test
> like the
> above, I would recommend that you just bite the bullet and do it. It
> will make your project much easier to develope and much more likely
> to be correct. In fact, you might make a test like the above for each
> one of your classes - take a look at how the serialization library
> tests
> are set up.
>
> d) I don't remember what your environment is - compiler, os, standard
> library, DLLS yes/no etc. So you might want to remind me again.
>
> Robert Ramey
>
Okay, it looks like pilot error. Swig was wrapping an object that was
of an even more derived type, and calling the function on one of the
intermediate classes. It was wrapped in the bowels of some of the
autogenerated code, and I simply missed it.
Everything is working now. I apologize for the unnecessary work.
>
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
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