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)

Category:
	    * Noindexed	pages

http://cppreference.com		  2024.06.10	   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.1.quarterly>

home | help