signature
"Martin Proulx" wrote in message news:431DE771.6080307@okiok.com...
Hello,
While using the latest release of boost, I've encountered a few questions concerning the usage of the serialization library with objects without default constructors.
Here they are:
1-) How can we construct an instance of a serialized object that doesn't have a default constructor?
The only option I've figured out is to normally construct an object with bogus values, then unserialize the real values while reading from the archive. Example:
X(0) val; // 0 being some bogus value.
inputStream >> val; // Overwrites all values within val;
Is this the correct way to do things?
No.. But I think what you want can be found in the manual in section: If you specialize save/load construct data you will get what you want. Use construct in place inside of load construct data.
Reference/Serializable/Concept/Pointers/Non-Default Constructors.
2-) How should we split the serialization between the class' serialize member versus load/save_construct_data?
My observations show that when un/serializing objects directly like shown above, load/save_construct_data aren't needed, so the serialize member has to handle everything. When serializing a vector<X>, load/save_construct_data does get called, so we have to un/serialize some members in those functions as well. At first glance, it seems some members will have to be un/serialized for the second time within load/save_construct_data.
Is that correct? For a class to be correctly un/serializable for all cases, load/save_construct_data must un/serialize members that are already taken care of in the serialize member?
Nope.
If his isn't simple, then there is something wrong. Check the code in test_non_default_ctor . If it still doesn't give you what you need, ask again.
RObert Ramey