tlx
Loading...
Searching...
No Matches
apply_tuple.hpp
Go to the documentation of this file.
1/*******************************************************************************
2 * tlx/meta/apply_tuple.hpp
3 *
4 * Part of tlx - http://panthema.net/tlx
5 *
6 * Copyright (C) 2016-2017 Timo Bingmann <tb@panthema.net>
7 *
8 * All rights reserved. Published under the Boost Software License, Version 1.0
9 ******************************************************************************/
10
11#ifndef TLX_META_APPLY_TUPLE_HEADER
12#define TLX_META_APPLY_TUPLE_HEADER
13
14#include <tuple>
15#include <utility>
16
18
19namespace tlx {
20
21//! \addtogroup tlx_meta
22//! \{
23
24/******************************************************************************/
25// Tuple Applier: takes a std::tuple<> and applies a variadic template function
26// to it. Hence, this expands the content of the tuple as the arguments.
27
28namespace meta_detail {
29
30template <typename Functor, typename Tuple, std::size_t... Is>
31auto apply_tuple_impl(Functor&& f, Tuple&& t, index_sequence<Is...>) {
32 return std::forward<Functor>(f)(
33 std::get<Is>(std::forward<Tuple>(t)) ...);
34}
35
36} // namespace meta_detail
37
38//! Call the functor f with the contents of t as arguments.
39template <typename Functor, typename Tuple>
40auto apply_tuple(Functor&& f, Tuple&& t) {
41 using Indices = make_index_sequence<
42 std::tuple_size<typename std::decay<Tuple>::type>::value>;
44 std::forward<Functor>(f), std::forward<Tuple>(t), Indices());
45}
46
47//! \}
48
49} // namespace tlx
50
51#endif // !TLX_META_APPLY_TUPLE_HEADER
52
53/******************************************************************************/
auto apply_tuple(Functor &&f, Tuple &&t)
Call the functor f with the contents of t as arguments.
auto apply_tuple_impl(Functor &&f, Tuple &&t, index_sequence< Is... >)