Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>This kind of manipulation is fairly easy with an index sequence technique: generate an index sequence with two fewer indices than your tuple, and use that sequence to select fields from the original. Using <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3658.html" rel="nofollow"><code>std::make_index_sequence</code></a> and return type deduction from C++14:</p> <pre><code>template &lt;typename... T, std::size_t... I&gt; auto subtuple_(const std::tuple&lt;T...&gt;&amp; t, std::index_sequence&lt;I...&gt;) { return std::make_tuple(std::get&lt;I&gt;(t)...); } template &lt;int Trim, typename... T&gt; auto subtuple(const std::tuple&lt;T...&gt;&amp; t) { return subtuple_(t, std::make_index_sequence&lt;sizeof...(T) - Trim&gt;()); } </code></pre> <p>In C++11:</p> <pre><code>#include &lt;cstddef&gt; // for std::size_t template&lt;typename T, T... I&gt; struct integer_sequence { using value_type = T; static constexpr std::size_t size() noexcept { return sizeof...(I); } }; namespace integer_sequence_detail { template &lt;typename, typename&gt; struct concat; template &lt;typename T, T... A, T... B&gt; struct concat&lt;integer_sequence&lt;T, A...&gt;, integer_sequence&lt;T, B...&gt;&gt; { typedef integer_sequence&lt;T, A..., B...&gt; type; }; template &lt;typename T, int First, int Count&gt; struct build_helper { using type = typename concat&lt; typename build_helper&lt;T, First, Count/2&gt;::type, typename build_helper&lt;T, First + Count/2, Count - Count/2&gt;::type &gt;::type; }; template &lt;typename T, int First&gt; struct build_helper&lt;T, First, 1&gt; { using type = integer_sequence&lt;T, T(First)&gt;; }; template &lt;typename T, int First&gt; struct build_helper&lt;T, First, 0&gt; { using type = integer_sequence&lt;T&gt;; }; template &lt;typename T, T N&gt; using builder = typename build_helper&lt;T, 0, N&gt;::type; } // namespace integer_sequence_detail template &lt;typename T, T N&gt; using make_integer_sequence = integer_sequence_detail::builder&lt;T, N&gt;; template &lt;std::size_t... I&gt; using index_sequence = integer_sequence&lt;std::size_t, I...&gt;; template&lt;size_t N&gt; using make_index_sequence = make_integer_sequence&lt;size_t, N&gt;; #include &lt;tuple&gt; template &lt;typename... T, std::size_t... I&gt; auto subtuple_(const std::tuple&lt;T...&gt;&amp; t, index_sequence&lt;I...&gt;) -&gt; decltype(std::make_tuple(std::get&lt;I&gt;(t)...)) { return std::make_tuple(std::get&lt;I&gt;(t)...); } template &lt;int Trim, typename... T&gt; auto subtuple(const std::tuple&lt;T...&gt;&amp; t) -&gt; decltype(subtuple_(t, make_index_sequence&lt;sizeof...(T) - Trim&gt;())) { return subtuple_(t, make_index_sequence&lt;sizeof...(T) - Trim&gt;()); } </code></pre> <p><a href="http://coliru.stacked-crooked.com/view?id=af8b52a1a5db4e56a33a6cd1f4f213a7-e1204655eaff68246b392dc70c5a32c9" rel="nofollow">Live at Coliru</a>.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload