
On Fri, Feb 27, 2009 at 10:52 AM, Stewart, Robert <Robert.Stewart@sig.com> wrote:
On Friday, February 27, 2009 1:48 PM Emil Dotchevski wrote:
On Fri, Feb 27, 2009 at 5:30 AM, Stewart, Robert <Robert.Stewart@sig.com> wrote:
The framework uses IOStreams to do its work. I believe the conversion functionality for the uuid type is captured via:
namespace user { class uuid;
template <class Stream> Stream & operator <<(Stream &, uuid const &); }
If operator<< was a reasonable to-string alternative, we wouldn't be needing a library for it.
That is the purpose of the insertion operator: it produces a character sequence from the right hand argument.
No, its purpose is to implement dumping of objects in streams, in terms of other existing operator<< overloads. This can also be used to convert to string, but the streams framework is rather clumsy to use when you need a std::string.
It is relevant, of course, and the framework should be able to automatically bind suitable operator<< overloads if they exist. It should also provide a generic operator<< overload that calls convert, so all types that integrate in the convert framework are automatically compatible with streams.
The library's convert() should use a provided operator <<() when available and the library should provide an operator <<() that uses a provided convert() when available? How will that work?
The former requires a bit more template kungfu but isn't a problem. The latter is easy, well, sort of, you need to use the correct target type for convert, but you get the idea: template <class Stream,class T> Stream & operator<<( Stream & s, T const & x ) { return s << convert<std::string>(x); } Emil Dotchevski Reverge Studios, Inc. http://www.revergestudios.com/reblog/index.php?n=ReCode