Есть ли класс диапазона в C ++ 11 для использования с циклами на основе диапазона?

Совсем недавно я обнаружил, что пишу это:

template <long int T_begin, long int T_end>
class range_class {
 public:
   class iterator {
      friend class range_class;
    public:
      long int operator *() const { return i_; }
      const iterator &operator ++() { ++i_; return *this; }
      iterator operator ++(int) { iterator copy(*this); ++i_; return copy; }

      bool operator ==(const iterator &other) const { return i_ == other.i_; }
      bool operator !=(const iterator &other) const { return i_ != other.i_; }

    protected:
      iterator(long int start) : i_ (start) { }

    private:
      unsigned long i_;
   };

   iterator begin() const { return iterator(T_begin); }
   iterator end() const { return iterator(T_end); }
};

template <long int T_begin, long int T_end>
const range_class<T_begin, T_end>
range()
{
   return range_class<T_begin, T_end>();
}

И это позволяет мне писать такие вещи:

for (auto i: range<0, 10>()) {
    // stuff with i
}

Теперь я знаю, что то, что я написал, возможно, не самый лучший код. И, возможно, есть способ сделать его более гибким и полезным. Но мне кажется, что что-то подобное должно было стать частью стандарта.

Так это? Была ли добавлена ​​какая-то новая библиотека для итераторов для диапазона целых чисел или, может быть, для общего диапазона вычисленных скалярных значений?

98
задан Xeo 24 December 2011 в 19:22
поделиться