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 fundamentals
     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::index_se-
     quence<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 argu-
     ment 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)

home | help