Hello all
Regarding the Boost.Serialization library.
Archiving to XML requires the use of name-value-pairs for all
serialized objects, be they stand-alone or encapsulated.
I wanted to confirm the following is correct.
In reference to the online and bundled HTML documentation:
http://www.boost.org/libs/serialization/doc/serialization.html#const
file:///.../boost_1_34_1/libs/serialization/doc/serialization.html#const
It would appear that the code block which reads:
ar & const_cast(t);
should also mention that, in the case of XML serialization:
using boost::serialization::make_nvp; // for convenience
ar & make_nvp("t", const_cast(t)); // cast used on load
Moreover, this code could be a candidate for a macro, something like
(or would this create its own can of worms?):
ar & BOOST_SERIALIZATION_NVP_CONSTDATA(T, t);
ar & BOOST_SERIALIZATION_CONSTDATA_NVP(T, t);
---
On that note, a new page describing user Boost.Serialization macros and
their usage might be helpful. For instance I have created the following
list (readers should note that my comments may well be incorrect):
BOOST_CLASS_EXPORT_GUID(SubClass, "MySC") // GUID is "globally unique id"
BOOST_CLASS_EXPORT(SubClass) // shortcut if class name is acceptable
BOOST_CLASS_VERSION(Class, 2) // reset class version, the default is zero
BOOST_IS_ABSTRACT(AbstractClass) // only some compilers [which ones ?]
BOOST_SERIALIZATION_NVP(data) // shortcut if object name acceptable [1]
BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base) // shortcut if object name acceptable [2]
BOOST_SERIALIZATION_SPLIT_MEMBER() // 'serialize' to 'save'/'load'
BOOST_SERIALIZATION_SHARED_PTR(Class) // depreciated [3]
BOOST_CLASS_TRACKING(MyVirtualBaseClass, boost::serialization::track_always)
BOOST_SHARED_POINTER_EXPORT(T) // depreciated from Boost version 1.32
BOOST_SHARED_POINTER_EXPORT_GUID(T, K) // depreciated from Boost version 1.32
BOOST_SERIALIZATION_LIBRARY_VERSION // yields a "release" number [4]
[1] boost::serialization::make_nvp("data", data);
[2] requires #include
[3] more specifically, for types without tracking set, that
is using boost::serialization::track_never
also under 1.34.1 this generates code only for particular
Metrowerks and Borland compilers
[4] requires #include
(but doesn't appear to be maintained)
I don't mind drafting out such a page. Could it be part of the
official web documentation or would I be better to add it to the boost
wiki as an informal contribution.
many thanks in advance
Robbie
---
Robbie Morrison
PhD student -- policy-oriented energy system simulation
Institute for Energy Engineering (IET)
Technical University of Berlin (TU-Berlin), Germany
[from IMAP client]