Boost logo

Boost :

Subject: Re: [boost] Proposed interface change to boost::algorithm::copy_while
From: Marshall Clow (mclow.lists_at_[hidden])
Date: 2013-02-26 15:36:30


On Feb 20, 2013, at 4:05 PM, Nathan Ridge <zeratul976_at_[hidden]> wrote:

>>> I'm proposing to change the interface to:
>>>
>>> template<typename InputIterator, typename OutputIterator, typename
>>> Predicate>
>>> std::pair<InputIterator, OutputIterator>
>>> copy_while ( InputIterator first, InputIterator last,
>>> OutputIterator result, Predicate p );
>>>
>>> i.e, changing the return type to return both iterators.
>>>
>>>
>> I think that certainly a change needs to be made to accomodate the extra
>> information. I wonder how wise it is to return a pair that when the
>> InputIterator type is the same as the OutputIterator type that it could be
>> mistaken for, and accepted by, range algorithms as input? (That's my fault
>> - doh!)
>
> An alternative would be to take the 'first' iterator by reference.
> Boost.Spirit uses this approach.

I just realized another reason not to like this.
If your prototype looks like this:
                template<typename InputIterator, typename OutputIterator, typename Predicate>
                OutputIterator copy_while ( InputIterator &first, InputIterator last, OutputIterator result, Predicate );

you can't call it like this:
        copy_while ( v.begin (), v.end (), out, pred );

-- Marshall

Marshall Clow Idio Software <mailto:mclow.lists_at_[hidden]>

A.D. 1517: Martin Luther nails his 95 Theses to the church door and is promptly moderated down to (-1, Flamebait).
        -- Yu Suzuki


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