
Markus Werle wrote:
I still cannot see how to avoid this extra <value> tag. Did it become clear now?
OK - I think I see the problem now. There is a solution - but it's slightly tricky. a) study the document and example on inheriting from an existing archive. b) derive your new archive extended_xml_oarchive from xml_oarchive_impl c) This will look something like: class extended_xml_oarchive : public xml_oarchive_impl<extended_xml_oarchive> { public: // pass on most types to normal handling in the base class xml_oarchive template<class T> void save(const T & t){ xml_oarchive_impl<std::ostream>::save(t); } // special handling for an MFC CString - treat as if primitive void save(const CString &s){ // just output the string using the output stream from base class // basic_text_oprimitive os << s; // assuming this is defined for CString ); extended_xml_oarchive(std::ostream & os, unsigned int flags = 0) : extended_xml_oarchive_impl<extended_xml_oarchive>(os, flags){} ~extended_xml_oarchive(){} }; and similarly for extended_xml_iarchive. This will handle CString similar to the way that std::string is handled. Note that the implementation of the function save(const CString ... isn't too robust in that it doesn't handle special characters like "<" which will muck up the xml. If you want to make this more robust - look to the definition for the serialization of std::string in xml_oarchive_impl.hpp for inspiration. Robert Ramey