LINUX.ORG.RU

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

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

В принципе, если утащить откуда нибудь именованные тьюплы, то можно было бы вообще без классов, вот в стандартной поставке выходит не очень вербоузно:

#include <tuple>
#include <functional>
#include <iostream>
#include <memory>

int main()
{
    auto create_counter = []() ->auto {

        auto i = std::make_shared<int>(0);

        auto increment = [i]() {
            return (*i)++;
        };

        auto reset = [i] {
            (*i) = 0;
        };

        return std::make_tuple(increment, reset);
    };

    auto counter = create_counter();
    for (auto i = 0; i < 5; i++) {
        std::cout << std::get<0>(counter)() << std::endl;
    }

    std::get<1>(counter)();
    std::cout << std::get<0>(counter)() << std::endl;

    return 0;
}

Исправление pon4ik, :

В принципе, если утащить откуда нибудь именованные тьюплы, то можно было бы вообще без классов, вот в стандартной поставке выходит не очень вербоузно:

#include <tuple>
#include <functional>
#include <iostream>
#include <memory>

int main()
{
    auto create_counter = []() ->auto {

        auto i = std::make_shared<int>(0);

        auto increment = [i]() {

            return (*i)++;
        };

        auto reset = [i] {
            (*i) = 0;
        };

        return std::make_tuple(increment, reset);
    };

    auto counter = create_counter();
    for (auto i = 0; i < 5; i++) {
        std::cout << std::get<0>(counter)() << std::endl;
    }

    std::get<1>(counter)();
    std::cout << std::get<0>(counter)() << std::endl;

    return 0;
}

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

В принципе, если утащить откуда нибудь именованные тьюплы, то можно было бы вообще без классов, вот в стандартной поставке выходит не очень вербоузно:

#include <tuple>
#include <functional>
#include <iostream>
#include <memory>

int main()
{
    auto create_counter = []() ->auto {

        auto i = std::make_shared<int>(0);

        auto increment = [i]() -> int {
            (*i)++;
            return *i;
        };

        auto reset = [i] {
            (*i) = 0;
        };

        return std::make_tuple(increment, reset);
    };

    auto counter = create_counter();
    for (auto i = 0; i < 5; i++) {
        std::cout << std::get<0>(counter)() << std::endl;
    }

    std::get<1>(counter)();
    std::cout << std::get<0>(counter)() << std::endl;

    return 0;
}