Boost logo

Boost :

Subject: Re: [boost] Formal Review Request: Boost.Convert
From: Stewart, Robert (Robert.Stewart_at_[hidden])
Date: 2009-02-27 14:14:49


On Friday, February 27, 2009 2:06 PM
Emil Dotchevski wrote:
> 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.

I hope you're not being purposely obtuse. I raised the insertion operator as the spelling of the hook for the library because the library will use a std::ostringstream to produce the (formatted) output. Since UDTs frequently provide such an operator, the convert code will piggy back on those operators easily, thus turning them into a handy means of converting to a 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);
> }

My point was it was a loop. How do you resolve it?

_____
Rob Stewart robert.stewart_at_[hidden]
Software Engineer, Core Software using std::disclaimer;
Susquehanna International Group, LLP http://www.sig.com

IMPORTANT: The information contained in this email and/or its attachments is confidential. If you are not the intended recipient, please notify the sender immediately by reply and immediately delete this message and all its attachments. Any review, use, reproduction, disclosure or dissemination of this message or any attachment by an unintended recipient is strictly prohibited. Neither this message nor any attachment is intended as or should be construed as an offer, solicitation or recommendation to buy or sell any security or other financial instrument. Neither the sender, his or her employer nor any of their respective affiliates makes any warranties as to the completeness or accuracy of any of the information contained herein or that this message or any of its attachments is free of viruses.


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