Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iterator>
- #include <vector>
- template<typename T>
- class reverse;
- template<typename T>
- class reverse<T&> {
- private:
- T& _iterable;
- public:
- explicit reverse(T& iterable) : _iterable{iterable} {}
- auto begin() const { return std::rbegin(_iterable); }
- auto end() const { return std::rend(_iterable); }
- };
- template<typename T>
- class reverse<T&&> {
- private:
- T _iterable;
- public:
- explicit reverse(T&& iterable) : _iterable{std::move(iterable)} {}
- auto begin() const { return std::rbegin(_iterable); }
- auto end() const { return std::rend(_iterable); }
- };
- template<typename T>
- reverse(T&& v) -> reverse<decltype(std::forward<T>(v))>;
- //Usage:
- void foo(int);
- std::vector<int> make_vec();
- void test_lvalue(std::vector<int>& lvalue) {
- for (auto i : reverse(lvalue)) {
- foo(i);
- }
- }
- void test_rvalue() {
- for (auto i : reverse(make_vec())) {
- foo(i);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement