
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
#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@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users