История изменений
Исправление 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;
}