| Technical Specification | ||||
| Filesystem library(filesystem TS) | ||||
| Library fundamentals(library fundamentals TS) | ||||
| Library fundamentals 2(library fundamentals TS v2) | ||||
| Library fundamentals 3(library fundamentals TS v3) | ||||
| Extensions for parallelism(parallelism TS) | ||||
| Extensions for parallelism 2(parallelism TS v2) | ||||
| Extensions for concurrency(concurrency TS) | ||||
| Extensions for concurrency 2(concurrency TS v2) | ||||
| Concepts(concepts TS) | ||||
| Ranges(ranges TS) | ||||
| Reflection(reflection TS) | ||||
| Mathematical special functions(special functions TR) | ||||
| Experimental Non-TS | ||||
| Pattern Matching | ||||
| Linear Algebra | ||||
| std::execution | ||||
| Contracts | ||||
| 2D Graphics |
experimental::apply | ||||
| Type-erased and polymorphic allocators | ||||
| Variable templates for type traits |
![]() | Merged into ISO C++ The functionality described on this page was merged into the mainline ISO C++ standard as of 3/2016, seestd::apply(since C++17) |
Defined in header <experimental/tuple> | ||
template<class F,class Tuple> constexpr decltype(auto) apply(F&& f, Tuple&& t); | (library fundamentals TS) | |
Invoke theCallable objectf with a tuple of arguments.
Contents |
| f | - | Callable object to be invoked |
| t | - | tuple whose elements to be used as arguments tof |
What returned byf.
namespace detail{template<class F,class Tuple,std::size_t...I>constexpr decltype(auto) apply_impl(F&& f, Tuple&& t,std::index_sequence<I...>){returnstd::invoke(std::forward<F>(f), std::get<I>(std::forward<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<Tuple>(t),std::make_index_sequence<std::tuple_size_v<std::decay_t<Tuple>>>{});} |
#include <iostream>#include <tuple> template<typename...Ts>void print_tuple(conststd::tuple<Ts...>&tuple){std::apply([](constauto&...elem){((std::cout<< elem<<'\n'), ...);}, tuple);} int main(){conststd::tuple<int,char> t=std::make_tuple(5,'a'); print_tuple(t);}
Output:
5a
(C++11) | creates atuple object of the type defined by the argument types(function template)[edit] |
(C++11) | creates atuple offorwarding references(function template)[edit] |