
Hi, I propose to add a simple helper function to create an iterator range of boost::transform_iterators. This would effectively create a view over a different range or a container. Currently this is possible to do with considerable code duplication: make_iterator_range( make_transform_iterator(vec.begin(), fun), make_transform_iterator(vec.end(), fun)); Here "fun" could be a rather complex lambda or bind expression. What I propose is to wrap these calls into a simple generator make_view. The above code would look much better: make_view(vec.begin(), vec.end(), fun); or make_view(vec, fun); I've attached a sample implementation of the make_view function. Do you think this could be useful? #ifndef BOOST_RANGE_VIEW_HPP_INCLUDED_ #define BOOST_RANGE_VIEW_HPP_INCLUDED_ #include <boost/iterator/transform_iterator.hpp> #include <boost/range/iterator_range.hpp> #include <boost/range/begin.hpp> #include <boost/range/end.hpp> #include <boost/range/iterator.hpp> namespace boost { template< typename IteratorT, typename FunT > inline iterator_range< transform_iterator< FunT, IteratorT >
make_view(IteratorT const& begin, IteratorT const& end, FunT const& fun) { return make_iterator_range( make_transform_iterator(begin, fun), make_transform_iterator(end, fun)); }
template< typename RangeT, typename FunT > inline iterator_range< transform_iterator< FunT, typename range_iterator< const RangeT >::type >
make_view(RangeT const& range, FunT const& fun) { return make_view(begin(range), end(range), fun); }
} // namespace boost #endif // BOOST_RANGE_VIEW_HPP_INCLUDED_