David Abrahams | 31 Aug 02:24
Picon
Picon
Favicon
Gravatar

Re: lifetime of ranges vs. iterators


on Sat Aug 30 2008, Steven Watanabe <watanabesj-AT-gmail.com> wrote:

> How would this work:
>
> 
> template<IteratorWithEnd Iterator, class F>
> class filter_iterator<Iterator, F>
> {
> public:
>    //...
>    filter_iterator(Iterator begin, Iterator end, F f)
>      : iter(set_end(begin,end)), f(f)
>    {}
>     
>    filter_iterator& operator++() {
>        ++iter;
>        while(iter != get_end(iter) && !f(*iter)) ++iter;
>        return *this;
>    }
>     
>    friend Iterator get_end(const filter_iterator& self) {
>        return
>            filter_iterator(
>                get_end(self.iter), get_end(self.iter), self.f);
>    }
>     
>    friend Iterator set_end(
>        const filter_iterator& self, const filter_iterator& other)
>    {
>        return filter_iterator(self.iter, get_end(other.iter), f);
>    }
> 
> private:
>    Iterator iter;
>    F f;
> };

Hi Steven,

Say for example Iterator is strided_iterator<int>.  Then the return type
of set_end above is strided_iterator<int>, right?  So how will its body
typecheck?  Seems like this needs a little more thought.

PS: I suggest you use more linebreaks, at least in your postings; code
with linebreaks inserted by mailers is even harder to read than code
with too few linebreaks ;-)

--

-- 
Dave Abrahams
BoostPro Computing
http://www.boostpro.com
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost


Gmane