讨论的替代方案很明确,但我认为需要一个代码示例。
鉴于将没有语言替代品,并且不依赖boost或您自己的迭代器基类版本,因此下面使用std::iterator的代码将固定在下面的代码中。
用 std::iterator
template<long FROM, long TO>
class Range {
public:
    
    class iterator: public std::iterator<
                        std::forward_iterator_tag, 
                        long,                      
                        long,                      
                        const long*,               
                        const long&                
                                      >{
        long num = FROM;
    public:
        iterator(long _num = 0) : num(_num) {}
        iterator& operator++() {num = TO >= FROM ? num + 1: num - 1; return *this;}
        iterator operator++(int) {iterator retval = *this; ++(*this); return retval;}
        bool operator==(iterator other) const {return num == other.num;}
        bool operator!=(iterator other) const {return !(*this == other);}
        long operator*() {return num;}
    };
    iterator begin() {return FROM;}
    iterator end() {return TO >= FROM? TO+1 : TO-1;}
};
(获得原始作者许可的http://en.cppreference.com/w/cpp/iterator/iterator中的代码)。
不带 std::iterator
template<long FROM, long TO>
class Range {
public:
    class iterator {
        long num = FROM;
    public:
        iterator(long _num = 0) : num(_num) {}
        iterator& operator++() {num = TO >= FROM ? num + 1: num - 1; return *this;}
        iterator operator++(int) {iterator retval = *this; ++(*this); return retval;}
        bool operator==(iterator other) const {return num == other.num;}
        bool operator!=(iterator other) const {return !(*this == other);}
        long operator*() {return num;}
        
        using difference_type = long;
        using value_type = long;
        using pointer = const long*;
        using reference = const long&;
        using iterator_category = std::forward_iterator_tag;
    };
    iterator begin() {return FROM;}
    iterator end() {return TO >= FROM? TO+1 : TO-1;}
};