Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::ranges...ew_interface(3) C++ Standard Libarystd::ranges...ew_interface(3)

NAME
       std::ranges::view_interface - std::ranges::view_interface

Synopsis
	  Defined in header <ranges>
	  template< class D >

	      requires	     std::is_class_v<D>	      &&       std::same_as<D,
       (since C++20)
	  std::remove_cv_t<D>>

	  class	view_interface;

	  std::ranges::view_interface is a helper class	template for  defining
       a view
	  interface.

	  view_interface is typically used with	CRTP:

	class my_view :	public std::ranges::view_interface<my_view>
	{
	public:
	    auto begin() const { /*...*/ }
	    auto end() const { /*...*/ }
	    // empty() is provided if begin() returns a	forward	iterator
	    // and end() returns a sentinel for	it.
	};

Member functions
	  empty		returns	whether	the derived view is empty. Provided if
       it satisfies
	  (C++20)	sized_range or forward_range.
			(public	member function)
	  cbegin	 returns  a  constant iterator to the beginning	of the
       range.
	  (C++23)	(public	member function)
	  cend		returns	a sentinel for the constant  iterator  of  the
       range.
	  (C++23)	(public	member function)
	  operator  bool  returns  whether the derived view is not empty. Pro-
       vided if
	  (C++20)	ranges::empty is applicable to it.
			(public	member function)
	  data		gets the address of derived view's data.  Provided  if
       its iterator type
	  (C++20)	satisfies contiguous_iterator.
			(public	member function)
			returns	 the  number  of elements in the derived view.
       Provided	if it
	  size		satisfies forward_range	and its	sentinel and  iterator
       type satisfy
	  (C++20)	sized_sentinel_for.
			(public	member function)
	  front		 returns  the  first element in	the derived view. Pro-
       vided if	it
	  (C++20)	satisfies forward_range.
			(public	member function)
	  back		returns	the last element in the	derived	view. Provided
       if it satisfies
	  (C++20)	bidirectional_range and	common_range.
			(public	member function)
	  operator[]	returns	the n^th element in the	derived	view. Provided
       if it satisfies
	  (C++20)	random_access_range.
			(public	member function)

Example
       // Run this code

	#include <iostream>
	#include <ranges>
	#include <vector>

	template<class T, class	A>
	class VectorView  :  public  std::ranges::view_interface<VectorView<T,
       A>>
	{
	public:
	    VectorView() = default;

	    VectorView(const std::vector<T, A>&	vec) :
		m_begin(vec.cbegin()), m_end(vec.cend())
	    {}

	    auto begin() const { return	m_begin; }

	    auto end() const { return m_end; }

	private:
	    typename std::vector<T, A>::const_iterator m_begin{}, m_end{};
	};

	int main()
	{
	    std::vector<int> v = {1, 4,	9, 16};

	    VectorView view_over_v{v};

	    // We can iterate with begin() and end().
	    for	(int n : view_over_v)
		std::cout << n << ' ';
	    std::cout << '\n';

	    // We get operator[] for free when inheriting from view_interface
	    // since we	satisfy	the random_access_range	concept.
	    for	(std::ptrdiff_t	i = 0; i != view_over_v.size();	++i)
		std::cout << "v[" << i << "] = " << view_over_v[i] << '\n';
	}

Output:
	1 4 9 16
	v[0] = 1
	v[1] = 4
	v[2] = 9
	v[3] = 16

	  Defect reports

	  The following	behavior-changing defect reports were applied retroac-
       tively to
	  previously published C++ standards.

	     DR	       Applied	  to		   Behavior    as    published
       Correct behavior
			      view_interface was required to be	derived
	  LWG 3549 C++20      from view_base,				   in-
       heritance removed
			      which sometimes required multiple	view_base
			      subobjects in a view

See also
	  ranges::subrange combines an iterator-sentinel pair into a view
	  (C++20)	   (class template)

http://cppreference.com		  2024.06.10	 std::ranges...ew_interface(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::ranges::view_interface&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help