void Action(std::vector<std::string>::const_iterator curr, const std::vector<std::string>::const_iterator &last) { if (curr == last) { return; } // ... } void ActionTwo(std::vector<std::string>::const_iterator curr, const std::vector<std::string>::const_iterator &last) { if (curr == last) { return; } // ... } void Action(std::vector<std::string>::const_iterator curr, const std::vector<std::string>::const_iterator &last) { if (curr == last) { return; } // ... if (*curr == ANY_VALUE) { ActionTwo(curr + 1, last); } // ... } #pragma once namespace Dq { // : Container ..Args STL . template <template <typename...> typename Container, typename ...Args> // - class Enumerator { private: // Container<Args...> &List = Container<Args...>(); // typename Container<Args...>::iterator Position = List.begin() - 1; public: // bool MoveNext() { return ++Position != List.end(); } // typename Container<Args...>::value_type &operator*() const { return *Position; } // void Reset() { Position = List.begin() - 1; } // explicit Enumerator(const Container<Args...> &cont) : List(cont) {} }; } std::vector values { 0, 1, 2, 3, 4, 5 }; Dq::Enumerator i(values); namespace Dq { // template <template <typename...> typename Container, typename ...Args> Enumerator<Container, Args...> GetEnumerator(const Container<Args...> &cont) { return Enumerator<Container, Args...>(cont); } } std::vector<int> values{ 0, 1, 2, 3, 4, 5 }; auto i = Dq::GetEnumerator(values); void ActionTwo(auto &position) { if (!position.MoveNext()) { return; } // ... } void Action(auto &position) { if (!position.MoveNext()) { return; } // ... if (*position == ANY_VALUE) { ActionTwo(); } // ... } template <template <typename...> typename Container, typename ...Args> typename Container<Args...>::iterator Enumerator<Container, Args...>::CurrentPostion() const { return Position; } template <template <typename...> typename Container, typename ...Args> typename Container<Args...>::iterator Enumerator<Container, Args...>::LastPostion() const { return List.end(); } Source: https://habr.com/ru/post/324808/
All Articles