
Ion GaztaƱaga <igaztanaga@gmail.com> writes:
Sorry, I really wanted to say "random access traversal" instead of random access iterator. Taking a snippet of the proposed implementation:
template <class T, class Difference = std::ptrdiff_t> class range_from_ref_iterator : public boost::iterator_facade < range_from_ref_iterator<T, Difference> , T , boost::random_access_traversal_tag , T & , Difference>
Correct me if I'm wrong but what I want is to simulate a source of N identical objects without modifying them, so I think this is a Readable Iterator and a Random Access Traversal Iterator.
Yes, but unless you take special measures, the iterator library will notice that you're using random access traversal and your reference type is a real reference, and it will make iterator_traits<range_from_ref_iterator<...> >::iterator_category be random_access_iterator_tag. IIUC, that would be a nonconforming iterator. 24.1.3 says: If a and b are both dereferenceable, then a == b if and only if *a and *b are the same object. I don't think your iterators meet taht criterion.
I would now propose something like:
template <class T, class Difference = std::ptrdiff_t> class repeat_read_iterator : public boost::iterator_facade < repeat_read_iterator<T, Difference> , const T , boost::random_access_traversal_tag , const T & , Difference>
so dereferencing "repeat_read_iterator<T>" would return const T & with random_access_traversal capability to be able move fast inside that "virtual read-only array". Am I missing something?
Only that the library will assign the wrong category unless you do something to prevent it.
Do you see this read only repeated sequence simulation useful to include it the iterator library?
Sure. But useful enough? That I do not know. -- Dave Abrahams Boost Consulting www.boost-consulting.com