#include <x/deserialize.H> class Aobj : virtual public x::obj { // ... }; class Bobj : virtual public x::obj { // ... }; class mytraits { public: template<typename ref_type> static void classcreate(ref_type &ref) { if (ref.null()) ref=ref_type::create(); } }; std::ifstream ifs("object.dat"); std::istreambuf_iterator<char> beg(ifs.rdbuf()), end; x::deserialize::iterator<std::istreambuf_iterator<char>, mytraits> deser(beg, end); // ... x::ptr<Aobj> a; deser(a);
An optional second parameter to the deserialization iterator template
specifies a template class. When deserializing a reference to an object,
the reference gets passed to the classcreate
()
static method of the traits class.
The above example is the default traits class, which invokes the default constructor for the object to initialize a null reference. If the reference passed to the deserialization iterator already refers to an existing object instance, it gets left alone.
The default traits class also has a specialized
classcreate
for
deserializing file descriptors.
A custom serialization traits class can define specialized
classcreate
() methods for
instantiating references to new class instances.