Biraz önce kendimi bunu yazarken buldum:
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>();
}
Bu da şöyle şeyler yazmama izin veriyor:
for (auto i: range<0, 10>()) {
// stuff with i
}
Şimdi, yazdığımın belki de en iyi kod olmadığını biliyorum. Ve belki onu daha esnek ve kullanışlı hale getirmenin bir yolu vardır. Ama bana öyle geliyor ki, bunun gibi bir şey standardın bir parçası olmalıydı.
Öyle mi? Bir tam sayı aralığında yineleyiciler için bir tür yeni kitaplık eklendi mi, yoksa genel bir hesaplanmış skaler değerler aralığı mı?