Boost logo

Boost :

Subject: Re: [boost] Formal Review Request: Boost.Convert
From: Emil Dotchevski (emildotchevski_at_[hidden])
Date: 2009-02-27 14:05:42


On Fri, Feb 27, 2009 at 10:52 AM, Stewart, Robert
<Robert.Stewart_at_[hidden]> 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_at_[hidden]> 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


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk