4 ms·
Thanks, those were interesting to read about. It doesn't seem like something that would come up in the for loop case, though.
by nemetroid 7y ago
Thanks, those were interesting to read about. It doesn't seem like something that would come up in the for loop case, though.
- mehrdadn 7y agoI mean, you can imagine proxies for stuff beside bools and matrices... template<class It> struct iterator_range { It b, e; It begin() const { return b; } It end() const { return e; } }; template<class It> iterator_range<It> make_iterator_range(It b, It e) { iterator_range<It> r = { b, e }; return r; } template<class T> struct endian_reversed_iterator { T *p; struct reference { T *p; operator T() const { return boost::endian::endian_reverse(*p); } reference &operator =(T const &other) const { *p = boost::endian::endian_reverse(other); } }; endian_reversed_iterator(T *p) : p(p) { } reference operator *() { reference r = { p }; return r; } endian_reversed_iterator &operator++() { ++p; return *this; } bool operator!=(endian_reversed_iterator const &other) const { return p != other.p; } }; int main() { unsigned arr[] = { 1, 2 }; for (auto x : make_iterator_range<endian_reversed_iterator<unsigned> >(&arr[0], &arr[2])) { ++x; // whatever } }