For Windows, where
wchar_t corresponds in size and encoding to Xerces’
XMLCh, all that’s needed to convert from a
wchar_t literal to Xerces
XMLCh string is, at most, a little
reinterpret_cast… But that won’t work on a system with 4 byte
wchar_t or a system where
wchar_t doesn’t imply Unicode. And although the non-Unicode systems are perhaps not your top porting priority, 4 byte
wchar_t systems are common.
The wrapping that I start discussing in this posting, based on the cppx
Ownership class, does a simple
reinterpret_cast when it can (e.g. for a literal
wchar_t string argument in Windows), and a dynamic allocation plus transcoding in other cases.
Ownership wrapping of the result abstracts away the details of how the string is converted, and whether deallocation is needed. Thus, the calling code does not have to care. It gets raw null-operation efficiency where possible, and otherwise at least the same convenient notation + C++ RAII based safety. 🙂