Я нещодавно написав це:
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
}
Тепер я знаю, що написав, можливо, не найкращий код. І, можливо, є спосіб зробити його більш гнучким і корисним. Але мені здається, що щось подібне повинно було стати частиною стандарту.
Так це? Чи була додана якась нова бібліотека для ітераторів для діапазону цілих чисел, чи, можливо, загальний діапазон обчислених скалярних значень?
range
шаблону функції? Це не додає нічого до того, у якому range_class
він використовується. Я маю на увазі, range<0,10>()
і range_class<0,10>()
виглядайте точно так само!