<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Template-Metaprogrammierung]]></title><description><![CDATA[<p>Auf der Suche nach einer Möglichkeit den Index eines Types in einem Tupel herauszufinden, bin ich auf folgende Möglichkeit gestoßen:</p>
<pre><code>template &lt; typename T, typename Tuple &gt; 
struct Index;

template &lt; typename T, typename... Types&gt; 
struct Index&lt;T, std::tuple&lt;T, Types...&gt;&gt; {
	static const std::size_t value = 0;
};

template &lt; typename T, typename U, typename... Types &gt; 
struct Index&lt;T, std::tuple&lt;U, Types...&gt;&gt; {
	static const std::size_t value = 1 + Index&lt;T, std::tuple&lt;Types...&gt;&gt;::value;
};
</code></pre>
<p>Allerdings verstehe ich nicht, wie das Ganze funktioniert. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> Wäre nett, wenn mir jemand erklären könnte wie denn jetzt genau für jeden Typ der Index herausgefunden wird.</p>
<p>Danke schon einmal im Voraus ! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/338929/template-metaprogrammierung</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Apr 2026 21:57:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/338929.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 22 Jul 2016 11:33:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template-Metaprogrammierung on Fri, 22 Jul 2016 11:33:39 GMT]]></title><description><![CDATA[<p>Auf der Suche nach einer Möglichkeit den Index eines Types in einem Tupel herauszufinden, bin ich auf folgende Möglichkeit gestoßen:</p>
<pre><code>template &lt; typename T, typename Tuple &gt; 
struct Index;

template &lt; typename T, typename... Types&gt; 
struct Index&lt;T, std::tuple&lt;T, Types...&gt;&gt; {
	static const std::size_t value = 0;
};

template &lt; typename T, typename U, typename... Types &gt; 
struct Index&lt;T, std::tuple&lt;U, Types...&gt;&gt; {
	static const std::size_t value = 1 + Index&lt;T, std::tuple&lt;Types...&gt;&gt;::value;
};
</code></pre>
<p>Allerdings verstehe ich nicht, wie das Ganze funktioniert. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> Wäre nett, wenn mir jemand erklären könnte wie denn jetzt genau für jeden Typ der Index herausgefunden wird.</p>
<p>Danke schon einmal im Voraus ! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503015</guid><dc:creator><![CDATA[Yamahari]]></dc:creator><pubDate>Fri, 22 Jul 2016 11:33:39 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Metaprogrammierung on Fri, 22 Jul 2016 12:07:57 GMT]]></title><description><![CDATA[<p>Das Template Index 1 ist lediglich dazu da, bestimmte Templatespezialisierungen erstellen zu können, also Index 2 und 3. Wie Templatespezialisierungen funktionieren, weißt du hoffentlich.<br />
Nun kann man eine Instanz von Index erstellen, dessen erstes Templateargument der zu suchende Typ T und das zweite der zu durchsuchende Tupel ist. Index 2 wird vom Kompiler gewählt, wenn der zu suchende Typ T der erste im Tupel vorkommende Typ ist. Value, also der Index ist demnach 0. Types... ist ein Template-Parameterpack und enthält die Typen, die nach T im Tupel stehen.<br />
Index 3 wird vom Kompiler gewählt, wenn der zu suchende Typ T nicht der erste Typ im Tupel ist, sondern ein Typ U der erste ist. Types... enthält wieder den Rest, der nach U kommt.<br />
Nun sind Index 1 und 2 rekursiv miteinander verknüpft. Index 3 instanziiert nämlich wiederum einen Index, wobei entweder Spezialisierung Index 1 oder 2 aufgerufen wird. Dabei übergibt Index 3 wieder den zu suchenden Typ und den Rest, welcher nach U kommt, rückt also eins nach vorne. Irgendwann wird nun Index 2 instanziiert, und die Rekursion ist am Ende angelangt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503016</guid><dc:creator><![CDATA[Techel]]></dc:creator><pubDate>Fri, 22 Jul 2016 12:07:57 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Metaprogrammierung on Fri, 22 Jul 2016 12:33:52 GMT]]></title><description><![CDATA[<p>Dank fold expressions geht das in C++17 dann direkt ohne Rekursion:</p>
<pre><code class="language-cpp">template &lt;typename T, typename Tuple, typename = std::make_index_sequence&lt;std::tuple_size&lt;Tuple&gt;{}&gt;&gt;
struct Index;
template &lt;typename T, typename... Types, typename... indexes&gt;
struct Index&lt;T, std::tuple&lt;Types...&gt;, std::index_sequence&lt;indexes...&gt;&gt;
    : std:: integral_constant&lt;std::size_t, ( ( std::is_same&lt;T, Types&gt;{} * indexes ) + ... )&gt; {};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2503019</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503019</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 22 Jul 2016 12:33:52 GMT</pubDate></item></channel></rss>