나는 조금 전에 이것을 작성하는 것을 발견했습니다.
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>()
정확히 같은 봐!