|
Boost : |
From: Eric Niebler (eric_at_[hidden])
Date: 2005-03-14 01:04:05
Background:
I have been working on range-based algorithms and adaptors. The
algorithms are variants of the std::algorithms that accept ranges
instead of a [begin,end) iterator pair. The adaptors are like the
iterator adaptors, except they adapt ranges.
Following the principal of least surprise, I want to call my range
adaptors filter_range, indirect_range, reverse_range and transform_range
(to parallel filter_iterator, indirect_iterator, etc). But I can't do
this, because there already is a transform_range, and it's a function!
Problem:
At the bottom of iterator_range.hpp is this:
template< typename SeqT, typename Range, typename FuncT >
inline SeqT transform_range( const Range& r, FuncT Func )
{
SeqT Seq;
std::transform( begin( r ), end( r ),
std::back_inserter(Seq), Func );
return Seq;
}
I'm not sure why. It looks like a range-based algorithm, but ... why
provide only one? (Two actually -- copy_range is there also.) And why
call it transform_range() instead of just calling it "transform" and
making it part of a complete range-based algorithm library?
Solution:
I suggest the functions copy_range() and transform_range() should be
removed or moved into a "deprecated" namespace, freeing up the
identifier "boost::transform_range" to be a type, analagous to
boost::transform_iterator. Development should proceed on a range-based
algorithms library to fill the need that the existing
"transform_range()" function is meeting.
Thoughts?
-- Eric Niebler Boost Consulting www.boost-consulting.com
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk