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