我发现自己是在不久前写的:
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>()
看起来完全相同!