MCPcopy Create free account
hub / github.com/andreasfertig/programming-with-cpp20 / custom_take_view

Class custom_take_view

03.23-rangesCustomTakeView0/main.cpp:17–45  ·  view source on GitHub ↗

#A Using ranges::view concept

Source from the content-addressed store, hash-verified

15
16template<std::ranges::view R> // #A Using ranges::view concept
17class custom_take_view
18: public std::ranges::view_interface<custom_take_view<R>> {
19 // #B Necessary data members
20 R base_{};
21 std::ranges::range_difference_t<R> count_{};
22
23public:
24 // #C Default constructible
25 custom_take_view() = default;
26
27 // #D Constructor for range and count
28 constexpr custom_take_view(
29 R base,
30 std::ranges::range_difference_t<R> count)
31 : base_{std::move(base)}
32 , count_{count}
33 {}
34
35 // #E view_interface members
36 constexpr R base() const& { return base_; }
37 constexpr R base() && { return std::move(base_); }
38
39 // #F Actual begin and end
40 constexpr auto begin() { return std::ranges::begin(base_); }
41 constexpr auto end()
42 {
43 return std::ranges::next(std::ranges::begin(base_), count_);
44 }
45};
46
47template<std::ranges::range R> // #G Deduction guide
48custom_take_view(R&& base, std::ranges::range_difference_t<R>)

Callers 1

operator()Method · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected