
Hi Robert,
On 23 February 2010 01:13, Robert Ramey
Paul wrote:
Hi,
I use xml_woarchive and xml_wiarchive for reading/writing configuration files.
It seems work work well for me, but now I'd like to see if I can do more with it... is it possible to load an XML serialized file, but completely IGNORE a subtree of the XML file if desired?
Anything is possible if you're willing to change the code that's in there.
I'm concerned about the "class_id" magic that might not be skippable. See below
eg template <class Archive> void load( Archive & ar, MyConfig & c, const unsigned int version ) { ar >> make_nvp("standard",c.standard); if (some_global_flag_or_whatever) ar >> make_nvp("advanced", c.advanced); else ar.skip("advanced"); // key bit }
Something like the following might be made to work.
ar >> c.standard if(flag) ar >> c.advanced else{ Advanced a; // to be thrown away ar >> a }
And what if "Advanced" is part of a module that may not be linked into the app ? The "lite" version doesn't have "Advanced", but the "full" version does. The code above doesn't describe how I was going to achieve that, but basically I was going to delegate the serialization of modules, something like void load(ar, modules, version) { string module_name; ar << module_name; ModuleManager::load_if_possible(config.module, module_name); } So if the module isn't available, then its not possible to deserialize the information, even into a temporary object. The code isn't linked in. I had another look at the basic_oarchive code and an XML archive. As you know, the first time a class is serialized, the tag header will also include a class_id="x" tracking="y" version="z"... but if I need to skip an entire subtree, it may miss that first visitation. If EVERY tag included that information, or at least the class_id number, then I could write a new XML archive that would be able to skip subtrees. By the way, is there a reason why there is no YAML archive format? Why only XML as a human-readable option? Thanks, Paul