
Doug Gregor wrote:
On Jul 9, 2007, at 11:12 PM, Stefan Seefeld wrote:
I'm using here libxml2 as backend
I want a seamless mapping that doesn't impose any unnecessary copying or other indirection to mitigate the 'impedance mismatch'.
This is a very, very, very, very, very good approach.
[I have quoted Stefan's words in the hope that I've captured the core of what Doug is agreeing so emphatically with - I hope I've got it right.] Aiming for the minimum overhead in your libxml2 wrapper is a valid objective. But perhaps in that case you should be selling this as a "C++ wrapper for libxml2", not as a "Boost XML library"? I would have thought that a largely backend-independent (or self-contained) library with STL-like interface would be more "Boost-compatible". Does anyone have any experience of how little overhead could be involved in going from e.attributes["foo"]="blah"; to e.set_attribute("foo","blah"); ? Sketch of implementation: class AttributeProxy { Element& e; string name; public: AttributeProxy(Element& e_, string name_): e(e_), name(name_) {} operator=(string value) { e.set_attribute(name,value); } }; class Attributes { Element& e; public: Attributes(Element& e_): e(e_) {} AttributeProxy operator[](string name) { return AttributeProxy(e,name); } // hmm, returns temporary! }; class Element { public: Attributes attributes; Element(): attributes(*this) {} private: set_attribute(string name, string value) { .... } } What do current compilers do with that? What can we expect in the future? Phil.