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

FreeBSD Manual Pages

  
 
  

home | help
std::experimental::apply(3)   C++ Standard Libary  std::experimental::apply(3)

NAME
       std::experimental::apply	- std::experimental::apply

Synopsis
	  Defined in header <experimental/tuple>
	  template  <class  F, class Tuple>		       (library	funda-
       mentals TS)
	  constexpr decltype(auto) apply(F&& f,	Tuple&&	t);

	  Invoke the Callable object f with a tuple of arguments.

Parameters
	  f - Callable object to be invoked
	  t - tuple whose elements to be used as arguments to f

Return value
	  What returned	by f.

Possible implementation
	  namespace detail {
	  template <class F, class Tuple, std::size_t... I>
	  constexpr decltype(auto) apply_impl(	F&&  f,	 Tuple&&  t,  std::in-
       dex_sequence<I...> )
	  {
	    return    std::invoke(std::forward<F>(f),	 std::get<I>(std::for-
       ward<Tuple>(t))...);
	    // Note: std::invoke is a C++17 feature
	  }
	  } // namespace detail

	  template <class F, class Tuple>
	  constexpr decltype(auto) apply(F&& f,	Tuple&&	t)
	  {
	      return  detail::apply_impl(std::forward<F>(f),  std::forward<Tu-
       ple>(t),
		  std::make_index_sequence<std::tuple_size_v<std::decay_t<Tu-
       ple>>>{});
	  }

Example
       // Run this code

	#include <iostream>
	#include <tuple>

	template<typename... Ts>
	void print_tuple (const	std::tuple<Ts...> &tuple)
	{
	    std::apply ([] (const auto &... elem)
			{
			    ((std::cout	<< elem	<< '\n'), ...);
			},
			tuple);
	}

	int main() {
	    const std::tuple<int, char>	t = std::make_tuple(5, 'a');
	    print_tuple(t);
	}

Output:
	5
	a

See also
	  make_tuple	    creates  a tuple object of the type	defined	by the
       argument	types
	  (C++11)	   (function template)
	  forward_as_tuple creates a tuple of forwarding references
	  (C++11)	   (function template)

http://cppreference.com		  2022.07.31	   std::experimental::apply(3)

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

home | help