Ich habe das erst vor kurzem geschrieben:
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>();
}
Und das erlaubt mir, solche Dinge zu schreiben:
for (auto i: range<0, 10>()) {
// stuff with i
}
Jetzt weiß ich, dass das, was ich geschrieben habe, vielleicht nicht der beste Code ist. Und vielleicht gibt es eine Möglichkeit, es flexibler und nützlicher zu machen. Aber es scheint mir, als hätte so etwas Teil des Standards sein sollen.
So ist es? Wurde eine neue Bibliothek für Iteratoren über einen Bereich von Ganzzahlen oder einen generischen Bereich von berechneten Skalarwerten hinzugefügt?
range
Vorlagenfunktion zu schreiben ? Es fügt der Verwendung, in der range_class
es verwendet wird , nichts hinzu . Ich meine range<0,10>()
und range_class<0,10>()
sehe genauso aus!