<?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[Partielle Template Spezifizierung und Deklarationsproblem]]></title><description><![CDATA[<p>Hallo<br />
Ich probiere gerade mit Typelists herum und habe dazu folgenden interessanten Artikel gefunden:<br />
<a href="http://www.ddj.com/cpp/184403813" rel="nofollow">http://www.ddj.com/cpp/184403813</a></p>
<p>Mein Problem bezieht sich auf die partielle Template Spezifikation - ich versuche folgenden Code zu benutzen:</p>
<pre><code class="language-cpp">template &lt;class T1&gt;
struct cons&lt;T1, null_typelist, null_typelist,
    null_typelist&gt;
{
    typedef typelist&lt;T1, null_typelist&gt; type;
};

template &lt;class T1, class T2&gt;
struct cons&lt;T1, T2, null_typelist, null_typelist&gt;
{
    typedef typelist&lt;T1, typelist&lt;T2,
        null_typelist&gt; &gt; type;
};

template &lt;class T1, class T2, class T3&gt;
struct cons&lt;T1, T2, T3, null_typelist&gt;
{
    typedef typelist&lt;T1, typelist&lt;T2, typelist&lt;T3,
        null_typelist&gt; &gt; &gt; type;
};

template &lt;class T1, class T2, class T3, class T4&gt;
struct cons
{
    typedef typelist&lt;T1, typelist&lt;T2, typelist&lt;T3, 
        typelist&lt;T4, null_typelist&gt; &gt; &gt; &gt; type;
};
</code></pre>
<p>...dabei meckerte mein g++ erstmal, deshalb hab ich noch eine allgemeine Deklaration der struct vorangestellt:</p>
<pre><code class="language-cpp">template &lt;class T1, class T2, class T3, class T4&gt; struct cons;
</code></pre>
<p>...nun versuche ich an anderer Stelle weiter unten folgenden Aufruf:</p>
<pre><code class="language-cpp">typedef cons&lt; unsigned int &gt;::type MyUintTestList;
</code></pre>
<p>Dabei wird nun folgendes angemeckert:</p>
<pre><code>(Zeile: Aufruf von cons)
error: wrong number of template arguments (1, should be 4)
(Zeile: Meine vorangestellte Deklaration von cons)
error: provided for &quot;template&lt;class T1, class T2, class T3, class T4&gt; struct cons&quot;
(Zeile: Aufruf von cons)
error: expected &quot;;&quot; before &quot;MyUintTestList&quot;
</code></pre>
<p>Ich denke irgendwie fehlt etwas an der Deklaration der verschiedenen partiellen Template Spezifikationen, aber ich komm irgendwie nicht drauf. Ich habe auch schon die &quot;fehlenden Template-Stellen&quot; im Aufruf durch NullTypes (im obigen Bsp: &quot;null_typelist&quot; zu ersetzen - erfolglos!).</p>
<p>Frage:<br />
Wie muss ich das Deklarieren, damit ich obige Errors nicht bekomme (liefere gerne mehr Code, wenn die Beschreibung so nicht reicht)?<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/227321/partielle-template-spezifizierung-und-deklarationsproblem</link><generator>RSS for Node</generator><lastBuildDate>Mon, 28 Sep 2026 10:10:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/227321.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 13 Nov 2008 19:21:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Partielle Template Spezifizierung und Deklarationsproblem on Thu, 13 Nov 2008 19:21:22 GMT]]></title><description><![CDATA[<p>Hallo<br />
Ich probiere gerade mit Typelists herum und habe dazu folgenden interessanten Artikel gefunden:<br />
<a href="http://www.ddj.com/cpp/184403813" rel="nofollow">http://www.ddj.com/cpp/184403813</a></p>
<p>Mein Problem bezieht sich auf die partielle Template Spezifikation - ich versuche folgenden Code zu benutzen:</p>
<pre><code class="language-cpp">template &lt;class T1&gt;
struct cons&lt;T1, null_typelist, null_typelist,
    null_typelist&gt;
{
    typedef typelist&lt;T1, null_typelist&gt; type;
};

template &lt;class T1, class T2&gt;
struct cons&lt;T1, T2, null_typelist, null_typelist&gt;
{
    typedef typelist&lt;T1, typelist&lt;T2,
        null_typelist&gt; &gt; type;
};

template &lt;class T1, class T2, class T3&gt;
struct cons&lt;T1, T2, T3, null_typelist&gt;
{
    typedef typelist&lt;T1, typelist&lt;T2, typelist&lt;T3,
        null_typelist&gt; &gt; &gt; type;
};

template &lt;class T1, class T2, class T3, class T4&gt;
struct cons
{
    typedef typelist&lt;T1, typelist&lt;T2, typelist&lt;T3, 
        typelist&lt;T4, null_typelist&gt; &gt; &gt; &gt; type;
};
</code></pre>
<p>...dabei meckerte mein g++ erstmal, deshalb hab ich noch eine allgemeine Deklaration der struct vorangestellt:</p>
<pre><code class="language-cpp">template &lt;class T1, class T2, class T3, class T4&gt; struct cons;
</code></pre>
<p>...nun versuche ich an anderer Stelle weiter unten folgenden Aufruf:</p>
<pre><code class="language-cpp">typedef cons&lt; unsigned int &gt;::type MyUintTestList;
</code></pre>
<p>Dabei wird nun folgendes angemeckert:</p>
<pre><code>(Zeile: Aufruf von cons)
error: wrong number of template arguments (1, should be 4)
(Zeile: Meine vorangestellte Deklaration von cons)
error: provided for &quot;template&lt;class T1, class T2, class T3, class T4&gt; struct cons&quot;
(Zeile: Aufruf von cons)
error: expected &quot;;&quot; before &quot;MyUintTestList&quot;
</code></pre>
<p>Ich denke irgendwie fehlt etwas an der Deklaration der verschiedenen partiellen Template Spezifikationen, aber ich komm irgendwie nicht drauf. Ich habe auch schon die &quot;fehlenden Template-Stellen&quot; im Aufruf durch NullTypes (im obigen Bsp: &quot;null_typelist&quot; zu ersetzen - erfolglos!).</p>
<p>Frage:<br />
Wie muss ich das Deklarieren, damit ich obige Errors nicht bekomme (liefere gerne mehr Code, wenn die Beschreibung so nicht reicht)?<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1614337</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1614337</guid><dc:creator><![CDATA[Fabeltier]]></dc:creator><pubDate>Thu, 13 Nov 2008 19:21:22 GMT</pubDate></item><item><title><![CDATA[Reply to Partielle Template Spezifizierung und Deklarationsproblem on Fri, 14 Nov 2008 11:30:44 GMT]]></title><description><![CDATA[<p>Hmm. Hast du auch die nester Version des g++?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1614605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1614605</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 14 Nov 2008 11:30:44 GMT</pubDate></item><item><title><![CDATA[Reply to Partielle Template Spezifizierung und Deklarationsproblem on Fri, 14 Nov 2008 13:06:48 GMT]]></title><description><![CDATA[<p>Danke, aber.. was ist denn die &quot;nester Version des g++&quot;?? Flags? Ich nutze Debian - ist da ein zusaetzliches Paket noetig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1614645</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1614645</guid><dc:creator><![CDATA[Fabeltier]]></dc:creator><pubDate>Fri, 14 Nov 2008 13:06:48 GMT</pubDate></item><item><title><![CDATA[Reply to Partielle Template Spezifizierung und Deklarationsproblem on Fri, 14 Nov 2008 13:16:57 GMT]]></title><description><![CDATA[<p>Fabeltier schrieb:</p>
<blockquote>
<p>Danke, aber.. was ist denn die &quot;nester Version des g++&quot;?? Flags? Ich nutze Debian - ist da ein zusaetzliches Paket noetig?</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> .. Sorry. ich meinte neuste.. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Also sprich 4.3.2</p>
<p><a href="http://gcc.gnu.org/" rel="nofollow">http://gcc.gnu.org/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1614651</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1614651</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 14 Nov 2008 13:16:57 GMT</pubDate></item><item><title><![CDATA[Reply to Partielle Template Spezifizierung und Deklarationsproblem on Fri, 14 Nov 2008 14:37:32 GMT]]></title><description><![CDATA[<p>Ah, ok.. nvm</p>
<pre><code>g++ (Debian 4.3.2-1) 4.3.2
</code></pre>
<p>Daran sollte es also eigentlich nicht liegen und obige Frage bleibt offen. <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="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1614709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1614709</guid><dc:creator><![CDATA[Fabeltier]]></dc:creator><pubDate>Fri, 14 Nov 2008 14:37:32 GMT</pubDate></item><item><title><![CDATA[Reply to Partielle Template Spezifizierung und Deklarationsproblem on Fri, 14 Nov 2008 14:46:50 GMT]]></title><description><![CDATA[<p>Hast du auch null_typelist definiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1614714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1614714</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Fri, 14 Nov 2008 14:46:50 GMT</pubDate></item><item><title><![CDATA[Reply to Partielle Template Spezifizierung und Deklarationsproblem on Fri, 14 Nov 2008 15:32:13 GMT]]></title><description><![CDATA[<p>Fellhuhn schrieb:</p>
<blockquote>
<p>Hast du auch null_typelist definiert?</p>
</blockquote>
<p>Ja, die Namen sind bei mir etwas anders, also.. der NullType heisst bei mir NullType:</p>
<pre><code>class NullType{};
</code></pre>
<p>Ich glaube in dem Artikel ist der NullType genauso definiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1614739</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1614739</guid><dc:creator><![CDATA[Fabeltier]]></dc:creator><pubDate>Fri, 14 Nov 2008 15:32:13 GMT</pubDate></item><item><title><![CDATA[Reply to Partielle Template Spezifizierung und Deklarationsproblem on Fri, 14 Nov 2008 15:34:01 GMT]]></title><description><![CDATA[<p>Fabeltier schrieb:</p>
<blockquote>
<p>Fellhuhn schrieb:</p>
<blockquote>
<p>Hast du auch null_typelist definiert?</p>
</blockquote>
<p>Ja, die Namen sind bei mir etwas anders, also.. der NullType heisst bei mir NullType:</p>
<pre><code>class NullType{};
</code></pre>
<p>Ich glaube in dem Artikel ist der NullType genauso definiert.</p>
</blockquote>
<p>Das heißt was in deinem ersten Posting steht ist nicht dein Code? Auf den ersten Blick würde ich nämlich sagen das du dann vermutlich dich irgendwo einfach vertippt hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1614743</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1614743</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Fri, 14 Nov 2008 15:34:01 GMT</pubDate></item><item><title><![CDATA[Reply to Partielle Template Spezifizierung und Deklarationsproblem on Fri, 14 Nov 2008 16:02:33 GMT]]></title><description><![CDATA[<p>LOL, tja wuerde ich zunaechst auch sagen.. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Nur, &quot;mein Code&quot; ist etwas umfassender - ich wollte eigentlich mit den Typelists herumspielen, ich stolpere aber schon bei der Deklaration der Partiellen Templates bzw den &quot;richtigen&quot; Forward Deklarationen (laut Fehlermeldungen bin ich mir hier sehr sicher dass es daran liegt, ich weiss eben nur nicht wie's geht).</p>
<p>Ich habe obigen Code aus dem Artikel auch ausprobiert - so ist's ja nicht! - aber mit selber Fehlermeldung. Oder besser gesagt - bekam ich eine andere Meldung &quot;cons ist kein Template&quot;. Das heisst fuer mich eindeutig, dass ich vor der Partiellen Template Spezifizierung erstmal das &quot;normale Template&quot; mit ALLEN Templatetypen zumindest einmal deklarieren muss (wie im 1. Posting schon beschrieben). Darauf wird in dem Artikel nicht eingegangen und den Fehler kannte ich schon, tja und daraufhin bekam ich eben die besagten 3 Fehlermeldungen pro Aufruf (eigentlich auch im 1. Posting schon beschrieben).</p>
<p>Dh, irgendwie scheint die Forward Declaration nicht ganz vollstaendig zu sein - der Compiler liest nur die erste und meint dann beim lesen des Aufrufs.. &quot;ehh pah, da fehlen noch x Typen bei dem Aufruf! -&gt; Error 1: zu wenig Typen, Error 2: vllt auch zu viele deklariert und Error 3: irgendwas fehlt da einfach vorm ';' damit's stimmt!!&quot;. Tja, aber wie geht's dann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1614757</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1614757</guid><dc:creator><![CDATA[Fabeltier]]></dc:creator><pubDate>Fri, 14 Nov 2008 16:02:33 GMT</pubDate></item><item><title><![CDATA[Reply to Partielle Template Spezifizierung und Deklarationsproblem on Fri, 14 Nov 2008 16:37:26 GMT]]></title><description><![CDATA[<p>Also so, wie es im Artikel steht, geht es bei mir auch nicht. Allerdings wenn man das ein wenig umformuliert und mit den eigenen Templatekenntnissen versieht, dann sollte das folgende funktionieren (Bei mir kompiliert er es jedenfalls):</p>
<pre><code class="language-cpp">template &lt;class H, class T&gt;
struct typelist
{
	typedef H head;
	typedef T tail;
};

class null_typelist { };

// Das hier muss als erstes hin, beim Artikel als letztes drin.
// Zudem Defaulttypen setzen.
template &lt;class T1, class T2 = null_typelist, class T3 = null_typelist, class T4 = null_typelist&gt; 
struct cons
{ 
	typedef typelist&lt;T1, typelist&lt;T2, typelist&lt;T3, typelist&lt;T4, null_typelist&gt; &gt; &gt; &gt; type; 
};

template &lt;class T1&gt; 
struct cons&lt;T1, null_typelist, null_typelist, null_typelist&gt; 
{ 
	typedef typelist&lt;T1, null_typelist&gt; type; 
}; 

template &lt;class T1, class T2&gt; 
struct cons&lt;T1, T2, null_typelist, null_typelist&gt; 
{ 
	typedef typelist&lt;T1, typelist&lt;T2, 
		null_typelist&gt; &gt; type; 
}; 

template &lt;class T1, class T2, class T3&gt; 
struct cons&lt;T1, T2, T3, null_typelist&gt; 
{ 
	typedef typelist&lt;T1, typelist&lt;T2, typelist&lt;T3, null_typelist&gt; &gt; &gt; type; 
}; 

int main()
{
	typedef cons&lt;unsigned int&gt;::type type;

	return 0;
}
</code></pre>
<p>Sonstige Veränderungen, ausser die beim Kommentar, wurden nicht gemacht.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1614773</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1614773</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 14 Nov 2008 16:37:26 GMT</pubDate></item><item><title><![CDATA[Reply to Partielle Template Spezifizierung und Deklarationsproblem on Fri, 14 Nov 2008 17:58:27 GMT]]></title><description><![CDATA[<p>Super,</p>
<p>Es kompiliert druch. Ich fass das nochmal zusammen:<br />
1. keine Forward Deklaration<br />
2. die Definition der &quot;vollstaendigen&quot; template Klasse zuerst<br />
3. fuer jeden template Parameter (ausser dem ersten natuerlich) einen Default Template Parameter setzen (den Null Type)</p>
<p>Das ganze bezieht sich auf die Typlisten aus Alexandrescu's &quot;Modern C++ Design&quot;. Leider werden dort (und in Loki) die Typlisten nur ueber Macros angesprochen, in dem spaeter veroeffentlichten Artikel (Link) beschreibt er eben diese, hier diskutierte, Zugriffsmethode.</p>
<p>Danke nochmal!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1614850</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1614850</guid><dc:creator><![CDATA[Fabeltier]]></dc:creator><pubDate>Fri, 14 Nov 2008 17:58:27 GMT</pubDate></item></channel></rss>