Piszę to chwilę temu:
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>();
}
A to pozwala mi pisać takie rzeczy:
for (auto i: range<0, 10>()) {
// stuff with i
}
Teraz wiem, że to, co napisałem, może nie jest najlepszym kodem. A może istnieje sposób, aby uczynić go bardziej elastycznym i użytecznym. Ale wydaje mi się, że coś takiego powinno być częścią standardu.
Więc to jest? Czy dodano jakąś nową bibliotekę dla iteratorów dla zakresu liczb całkowitych, czy może ogólny zakres obliczonych wartości skalarnych?