Problems non intrusively serializing template inheritance classes, boost 1.33
Hi, I am relatively a new to Boost serialization classes. I am trying to serialize a derived template class. template<class T> class base {}; tempate<class T> class derived : public base<T> {}; I am trying to serialize 'derived' and have tried many different things. I am unable to serialize the inherited template classes. For some reason the code calls (1) 'derived::Serialize' (2) 'base::Save' and never executes 'derived:: Save' and doesnot serialize the 'derived' object properly. I am attaching the source code (SerializeTemplates.cpp) and the output( output.txt) of the program. I am using MSVC7.1, debug mode, Boost 1.33, Spirit 1.8 It will be great, if somebody could point out what I am doing wrong. Thanks, Pyush
try replacing
template
I had tried putting 'const' in the save function header. The code
compilation fails with "boost::STATIC_ASSERTION_FAILURE<x>" at the
"save_override" function in "basic_xml_oarchive.hpp".
I tried "BOOST_SERIALIZATION_BASE_OBJECT_NVP(obj)" and
"boost::serialization::base_object<
Hi, I am relatively a new to Boost serialization classes. I am trying to serialize a derived template class.
template<class T> class base {}; tempate<class T> class derived : public base<T> {};
I am trying to serialize 'derived' and have tried many different things. I am unable to serialize the inherited template classes. For some reason the code calls (1) 'derived::Serialize' (2) 'base::Save' and never executes 'derived:: Save' and doesnot serialize the 'derived' object properly.
I am attaching the source code (SerializeTemplates.cpp) and the output( output.txt) of the program. I am using MSVC7.1, debug mode, Boost 1.33, Spirit 1.8 It will be great, if somebody could point out what I am doing wrong. Thanks, Pyush
I just changed
template
Two Problems:
Firstly---> I made the changes you had suggested and it did not work for
me. The compilation fails with
"C:\ai\src\external\boost133\boost\archive\basic_xml_oarchive.hpp(86): error
C2027: use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>'". Do I
have to define a name-value pair??
(Refer to my previous boost users mailing list posting).
Is it possible for you to attach the cpp code that you compiled and tested
(I just want to make sure that I am not doing something stupid).
Secondly----> The output that you had attached just serializes the 'base'
object and does not serialize the 'derived' object. I thought the result
should have been serialized 'derived' object. Is my understanding wrong?
Pyush
"Robert Ramey"
I just changed
template
inline void save(Archive& ar, derived<T>& obj, const unsigned int version) { to template
inline void save(Archive& ar, const nderived<T>& obj, const unsigned int version) { at line # 91,
and I removed the l // from line #85
compiled and ran with VC 7.1 Seemed to work find. the output was:
------ Build started: Project: test_zexp, Configuration: Debug runtime-dynamic text_archive Win32 ------ Linking... Creating library
c:\BoostMainCVS\libs\serialization\vc7ide\../../../bin/boost/libs/serialization/test/test_zexp_text_archive.test/vc-7_1/debug/threading-multi//test_zexp.lib
and object
c:\BoostMainCVS\libs\serialization\vc7ide\../../../bin/boost/libs/serialization/test/test_zexp_text_archive.test/vc-7_1/debug/threading-multi//test_zexp.exp
run test_zexp with Debug runtime-dynamic text_archive base: Save derived<T>::Serialize <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <!DOCTYPE boost_serialization>
<originalObject class_id="0" tracking_level="0" version="0"> <temp>100</temp> </originalObject> which looks correct to me.
Robert Ramey
On 9/26/05, Pyush Agrawal
I had tried putting 'const' in the save function header. The code compilation fails with "boost::STATIC_ASSERTION_FAILURE<x>" at the "save_override" function in "basic_xml_oarchive.hpp".
I tried "BOOST_SERIALIZATION_BASE_OBJECT_NVP(obj)" and "boost::serialization::base_object<
(obj)" and I am not able to compile the source code. Base object serialization macros are not able to deduce the template argument list. Pyush
On 9/26/05, Pyush Agrawal
wrote: Hi, I am relatively a new to Boost serialization classes. I am trying to serialize a derived template class.
template<class T> class base {}; tempate<class T> class derived : public base<T> {};
I am trying to serialize 'derived' and have tried many different things. I am unable to serialize the inherited template classes. For some reason the code calls (1) 'derived::Serialize' (2) 'base::Save' and never executes 'derived:: Save' and doesnot serialize the 'derived' object properly.
I am attaching the source code (SerializeTemplates.cpp) and the output( output.txt) of the program. I am using MSVC7.1, debug mode, Boost 1.33, Spirit 1.8 It will be great, if somebody could point out what I am doing wrong. Thanks, Pyush
Here are the changes I made. This makes it save but more changes would have to be made in order to load.
Robert Ramey
"Pyush Agrawal"
I just changed
template
inline void save(Archive& ar, derived<T>& obj, const unsigned int version) { to template
inline void save(Archive& ar, const nderived<T>& obj, const unsigned int version) { at line # 91,
and I removed the l // from line #85
compiled and ran with VC 7.1 Seemed to work find. the output was:
------ Build started: Project: test_zexp, Configuration: Debug runtime-dynamic text_archive Win32 ------ Linking... Creating library c:\BoostMainCVS\libs\serialization\vc7ide\../../../bin/boost/libs/serialization/test/test_zexp_text_archive.test/vc-7_1/debug/threading-multi//test_zexp.lib and object c:\BoostMainCVS\libs\serialization\vc7ide\../../../bin/boost/libs/serialization/test/test_zexp_text_archive.test/vc-7_1/debug/threading-multi//test_zexp.exp run test_zexp with Debug runtime-dynamic text_archive base: Save derived<T>::Serialize <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <!DOCTYPE boost_serialization>
<originalObject class_id="0" tracking_level="0" version="0"> <temp>100</temp> </originalObject> which looks correct to me.
Robert Ramey
On 9/26/05, Pyush Agrawal
participants (2)
-
Pyush Agrawal
-
Robert Ramey