<?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[Variadic templates Spezialisierung]]></title><description><![CDATA[<p>Hallo,</p>
<p>zur Hilfe mit einem Tupel habe ich folgenden Code geschrieben:</p>
<pre><code class="language-cpp">template&lt;unsigned int Num = 0, typename... ChannelTypes&gt;
		struct tuple_helper
        {
			static ChannelSink* execute(channel_id_type id, std::tuple&lt;ChannelSinkT&lt;ChannelTypes&gt;*...&gt;&amp; tup) {
				if (std::get&lt;Num&gt;(tup)-&gt;get_id() == id) {
					return std::get&lt;Num&gt;(tup);
				}
				else {
					return find_channel&lt;Num + 1, ChannelTypes...&gt;::execute(id, tup);
				}
			}
		};

		template&lt; typename... ChannelTypes &gt;
		struct tuple_helper&lt; sizeof...(ChannelTypes), ChannelTypes... &gt;
		{
			static ChannelSink* execute(channel_id_type id, std::tuple&lt;ChannelSinkT&lt;ChannelTypes&gt;*...&gt;&amp; tup) {
				return nullptr; // HIER
			}
		};
</code></pre>
<p>Ist die Spezialisierung mit dem sizeof... in C++ legal?<br />
Per Debugger lande ich in der mit &quot;// HIER&quot; markierten Zeile, und auf dem Stack ist folgende Funktion:</p>
<pre><code>unittest.exe!up::detail::tuple_helper&lt;1,up::analog,up::minmax&gt;::execute(unsigned int id, std::tuple&lt;up::ChannelSinkT&lt;up::analog&gt; *,up::ChannelSinkT&lt;up::minmax&gt; *&gt; &amp; tup)
</code></pre>
<p>Der trifft doch aber die komplett falsche Spezialisierung da?!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/321584/variadic-templates-spezialisierung</link><generator>RSS for Node</generator><lastBuildDate>Sun, 19 Jul 2026 13:38:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/321584.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 17 Nov 2013 14:00:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Variadic templates Spezialisierung on Sun, 17 Nov 2013 14:00:23 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>zur Hilfe mit einem Tupel habe ich folgenden Code geschrieben:</p>
<pre><code class="language-cpp">template&lt;unsigned int Num = 0, typename... ChannelTypes&gt;
		struct tuple_helper
        {
			static ChannelSink* execute(channel_id_type id, std::tuple&lt;ChannelSinkT&lt;ChannelTypes&gt;*...&gt;&amp; tup) {
				if (std::get&lt;Num&gt;(tup)-&gt;get_id() == id) {
					return std::get&lt;Num&gt;(tup);
				}
				else {
					return find_channel&lt;Num + 1, ChannelTypes...&gt;::execute(id, tup);
				}
			}
		};

		template&lt; typename... ChannelTypes &gt;
		struct tuple_helper&lt; sizeof...(ChannelTypes), ChannelTypes... &gt;
		{
			static ChannelSink* execute(channel_id_type id, std::tuple&lt;ChannelSinkT&lt;ChannelTypes&gt;*...&gt;&amp; tup) {
				return nullptr; // HIER
			}
		};
</code></pre>
<p>Ist die Spezialisierung mit dem sizeof... in C++ legal?<br />
Per Debugger lande ich in der mit &quot;// HIER&quot; markierten Zeile, und auf dem Stack ist folgende Funktion:</p>
<pre><code>unittest.exe!up::detail::tuple_helper&lt;1,up::analog,up::minmax&gt;::execute(unsigned int id, std::tuple&lt;up::ChannelSinkT&lt;up::analog&gt; *,up::ChannelSinkT&lt;up::minmax&gt; *&gt; &amp; tup)
</code></pre>
<p>Der trifft doch aber die komplett falsche Spezialisierung da?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365999</guid><dc:creator><![CDATA[EinerVonUns]]></dc:creator><pubDate>Sun, 17 Nov 2013 14:00:23 GMT</pubDate></item><item><title><![CDATA[Reply to Variadic templates Spezialisierung on Sun, 17 Nov 2013 14:16:40 GMT]]></title><description><![CDATA[<p>Okay, ein minimalisiertes Beispiel:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

template&lt; unsigned int Num, typename... Types &gt;
struct spezialization_test {
	static void diag() {
		if (Num == sizeof...(Types)) {
			std::cout &lt;&lt; &quot;Error&quot;;
		}
	}
};

template&lt; typename... Types &gt;
struct spezialization_test&lt; sizeof...(Types), Types... &gt;
{
	static void diag() {
		if (Num != sizeof...(Types)) {
			std::cout &lt;&lt; &quot;Error&quot;;
		}
	}
};

int main()
{
	spezialization_test&lt;3, int, float, double &gt;::diag();
    return 0;
}
</code></pre>
<p>... ergibt &quot;Error&quot; bei mir, das darf doch gar nicht sein?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2366003</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366003</guid><dc:creator><![CDATA[EinerVonUns]]></dc:creator><pubDate>Sun, 17 Nov 2013 14:16:40 GMT</pubDate></item><item><title><![CDATA[Reply to Variadic templates Spezialisierung on Sun, 17 Nov 2013 14:23:37 GMT]]></title><description><![CDATA[<p>Okay, Ideone mäkelt die Spezialisierung schon beim Kompilieren an, man darf das offensichtlich gar nicht machen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> Ich sollte mein Experimentier-Zeug wohl immer zuerst durch einen vernünftigen Compiler jagen.<br />
Gibt's irgendeinen Grund, aus dem das nicht erlaubt ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2366005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366005</guid><dc:creator><![CDATA[EinerVonUns]]></dc:creator><pubDate>Sun, 17 Nov 2013 14:23:37 GMT</pubDate></item><item><title><![CDATA[Reply to Variadic templates Spezialisierung on Sun, 17 Nov 2013 14:25:36 GMT]]></title><description><![CDATA[<blockquote>
<p>Ist die Spezialisierung mit dem sizeof... in C++ legal?</p>
</blockquote>
<p>Nein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2366007</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366007</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sun, 17 Nov 2013 14:25:36 GMT</pubDate></item><item><title><![CDATA[Reply to Variadic templates Spezialisierung on Sun, 17 Nov 2013 14:38:36 GMT]]></title><description><![CDATA[<p>Hier noch das Zitat:</p>
<p>§14.5.5/8 schrieb:</p>
<blockquote>
<p>A partially specialized non-type argument expression shall not involve a template parameter of the partial specialization except when the argument expression is a simple <em>identifier</em>.</p>
</blockquote>
<blockquote>
<p>Gibt's irgendeinen Grund, aus dem das nicht erlaubt ist?</p>
</blockquote>
<p>Diese Regel wurde eigentlich für Fälle wie diese hier entworfen (Beispiel aus demselben Absatz):</p>
<pre><code>template &lt;int I, int J&gt; struct A {};
template &lt;int I&gt; struct A&lt;I+5, I*2&gt; {};
</code></pre>
<p>(~Edit: Whups! Da ist mir glatt der zweite Teil des Zitats entlaufen. Korrigiert~)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2366010</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366010</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sun, 17 Nov 2013 14:38:36 GMT</pubDate></item><item><title><![CDATA[Reply to Variadic templates Spezialisierung on Sun, 17 Nov 2013 14:41:15 GMT]]></title><description><![CDATA[<p>Was, der Compiler löst mir keine Gleichungssysteme? <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="😃"
    /><br />
Ich sehe ein, dass das zuviel des Guten wäre, aber in meinem Falle tritt da ja keine von zwei Variablen abhängige &quot;Berechnung&quot; auf, also ist das ja kein so starkes Problem...</p>
<p>Naja wie dem auch sei, die Behebung des ursprünglichen Problems war ja nun simpel und ich merke mir für die Zukunft den Paragraph, danke dafür.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2366011</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366011</guid><dc:creator><![CDATA[EinerVonUns]]></dc:creator><pubDate>Sun, 17 Nov 2013 14:41:15 GMT</pubDate></item></channel></rss>