Boost logo

Boost Users :

Subject: [Boost-users] [Serialization] XML: Necessity of attribute class_id although class_name is given
From: Frank Stähr (staehr_at_[hidden])
Date: 2014-07-28 11:53:08


Hello everybody,

I would like to know what the purpose of the xml attribute class_id is,
how it works and in which cases it can be omitted.

An example: “Base” is the (abstract) base class of _GMTF_ and _TTF_, and
_Hist_ also has got a similar base class.

If a pointer of Hist is a member of GMTF and you want to serialize a
pointer of Base, you get something like:

<filter class_id="0" class_name="GMTF">
   <m_bufHalfMaxSize>4</m_bufHalfMaxSize>
   <m_cutDetector class_id="1" class_name="Hist"></m_cutDetector>
</filter>

Here, the macros
• BOOST_CLASS_EXPORT_GUID(...),
• BOOST_CLASS_IMPLEMENTATION(...,
boost::serialization::object_serializable) and
• BOOST_CLASS_TRACKING(..., boost::serialization::track_never)
are used.

The problem now is: Although the exact classes are given by
human-readable class names (and used!), you cannot omit or change the
class_id. If you edit the XML file by hand, it can become invalid (->
exception on reading). It seems that the class ids are just ascending
non-negative numbers.

What are the rules for choosing the class ids? Why are they necessary?
Is there a trick to remove this attribute or at least to ignore it?

Thanks,
Frank

-- 
Frank Stähr
Technische Universität Berlin
Communication Systems Group
Sekr. EN1 Einsteinufer 17
10587 Berlin, Germany

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