LINUX.ORG.RU

История изменений

Исправление Siborgium, (текущая версия) :

А «схема» реализуется через обычный объект с begin-end, а-ля:

struct Sequence {
    size_t counter_ = 0;
    size_t end_     = 0;

    constexpr auto current() { return counter_; }
    constexpr auto next() { counter_++; }
    constexpr auto eor() { return counter_ == end_; }

    struct End {};
    struct Begin {
        Sequence& ref;
        constexpr auto operator != (End) { return !ref.eor(); }
        decltype(auto) operator * () {
            return ref.current();
        }
        auto& operator ++ () {
            ref.next();
            return *this;
        }
    };

    constexpr auto begin() { return Begin{ *this }; }
    constexpr auto end() { return End{}; }
};

int main() {
    Sequence sequence{0, 10};
    for (auto i: sequence) {
        std::cout << i << '\n';
    }
}

Исходная версия Siborgium, :

А «схема» реализуется через обычный объект с begin-end, а-ля:

for (auto && value: sequence) {
    // ...
}