<?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-member-function specialisation]]></title><description><![CDATA[<p>Hey, irgendwie komme ich gerade nicht richtig auf die Lösung.<br />
Problem: compiler error (MSVC2010) <em>error C2768: 'A::add_scene' : illegal use of explicit template arguments in Zeile 13</em><br />
<a href="http://msdn.microsoft.com/en-us/library/e338tex6(VS.80).aspx" rel="nofollow">msdn error explanation</a></p>
<p>bei folgendem code</p>
<pre><code class="language-cpp">struct A
{
    template &lt;typename T&gt;void add_scene() 
	{
		do_some_stuff();
	}
	template&lt;typename H, typename T&gt; 
	void add_scene&lt; Loki::Typelist&lt;H,T&gt; &gt;()
	{
		do_the_same_stuff_as_above();
	}

	template&lt;&gt; 
	void add_scene&lt;Loki::NullType&gt; (){}
};
</code></pre>
<p>Kann mir jemand den Fehler erklären? msdn hilft mir hier gerade nicht viel weiter.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/284860/template-member-function-specialisation</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 19:10:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/284860.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 09 Apr 2011 20:35:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to template-member-function specialisation on Sat, 09 Apr 2011 20:37:38 GMT]]></title><description><![CDATA[<p>Hey, irgendwie komme ich gerade nicht richtig auf die Lösung.<br />
Problem: compiler error (MSVC2010) <em>error C2768: 'A::add_scene' : illegal use of explicit template arguments in Zeile 13</em><br />
<a href="http://msdn.microsoft.com/en-us/library/e338tex6(VS.80).aspx" rel="nofollow">msdn error explanation</a></p>
<p>bei folgendem code</p>
<pre><code class="language-cpp">struct A
{
    template &lt;typename T&gt;void add_scene() 
	{
		do_some_stuff();
	}
	template&lt;typename H, typename T&gt; 
	void add_scene&lt; Loki::Typelist&lt;H,T&gt; &gt;()
	{
		do_the_same_stuff_as_above();
	}

	template&lt;&gt; 
	void add_scene&lt;Loki::NullType&gt; (){}
};
</code></pre>
<p>Kann mir jemand den Fehler erklären? msdn hilft mir hier gerade nicht viel weiter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2046928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2046928</guid><dc:creator><![CDATA[nocheinmitglied]]></dc:creator><pubDate>Sat, 09 Apr 2011 20:37:38 GMT</pubDate></item><item><title><![CDATA[Reply to template-member-function specialisation on Sun, 10 Apr 2011 08:13:12 GMT]]></title><description><![CDATA[<p>Ich glaube</p>
<p>nocheinmitglied schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template&lt;typename H, typename T&gt; 
void add_scene&lt; Loki::Typelist&lt;H,T&gt; &gt;()
{
  do_the_same_stuff_as_above();
}
</code></pre>
</blockquote>
<p>ist nicht erlaubt.<br />
Es sollte statt dessen</p>
<pre><code class="language-cpp">//Falscher Code
</code></pre>
<p>heissen.</p>
<p>MfG, EOutOfResources</p>
<p>EDIT: Quatsch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2046987</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2046987</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sun, 10 Apr 2011 08:13:12 GMT</pubDate></item><item><title><![CDATA[Reply to template-member-function specialisation on Sun, 10 Apr 2011 07:55:40 GMT]]></title><description><![CDATA[<p>Leider nicht:<br />
error C3206: 'A::add_scene' : invalid template argument for 'T', missing template argument list on class template 'Loki::Typelist'</p>
<p>(Woher soll der compiler dann auch wissen welche Klassen ich meine? Vllt. möchte ich nur Loki::Typelist&lt;Widget,NullType&gt; haben, was auch eine mögliche spezialisierung für z.B. die letzte Funktion ist)</p>
<p>Ich benötige außerdem T und H.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2046993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2046993</guid><dc:creator><![CDATA[nocheinmitglied]]></dc:creator><pubDate>Sun, 10 Apr 2011 07:55:40 GMT</pubDate></item><item><title><![CDATA[Reply to template-member-function specialisation on Sun, 10 Apr 2011 08:12:21 GMT]]></title><description><![CDATA[<p>---</p>
<p>EDIT: Nur Müll</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2046995</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2046995</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sun, 10 Apr 2011 08:12:21 GMT</pubDate></item><item><title><![CDATA[Reply to template-member-function specialisation on Sun, 10 Apr 2011 08:08:50 GMT]]></title><description><![CDATA[<p>---</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2046996</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2046996</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Sun, 10 Apr 2011 08:08:50 GMT</pubDate></item><item><title><![CDATA[Reply to template-member-function specialisation on Sun, 10 Apr 2011 09:23:17 GMT]]></title><description><![CDATA[<p>In dem Fall hast du wohl ein Problem - C++ erlaubt keine partiellen Template-Spezialisierungen für Funktionen. Das heißt, du müsstest die Funktionalität auslagern in eine Hilfsfunktion und mit TMP-Methoden auswählen:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
struct selector
{
  typedef default_type type;
};

//partielle Spezialisierung von Klassen ist erlaubt ;)
template&lt;typename H, typename T&gt;
struct selector&lt; Loki::Typelist&lt;H,T&gt; &gt;
{
  typedef typelist type;
  typedef H first_type;
  typedef T second_type;
};

struct A
{
    template &lt;typename T&gt;void add_scene(const T&amp; param) 
    {
        add_scene_impl(param, typename selector&lt;T&gt;::type());
    }
    template&lt;typename T&gt;
    void add_scene_impl(const T&amp; param, default_type)
    {
        do_some_stuff();
    }
    template&lt;typename T&gt; 
    void add_scene_impl(const T&amp; param, typelist)
    {
        typedef typename selector&lt;T&gt;::first_type H;
        typedef typename selector&lt;T&gt;::second_type T;
        do_the_same_stuff_as_above();
    }
};
</code></pre>
<p>(ungetestet und ohne Garantie)</p>
<p>PS: Ist es eigentlich korrekt, daß deine add_scene-Methoden keine Parameter entgegennehmen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2046997</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2046997</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sun, 10 Apr 2011 09:23:17 GMT</pubDate></item><item><title><![CDATA[Reply to template-member-function specialisation on Sun, 10 Apr 2011 08:16:04 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<p>Dann vielleicht so:</p>
<pre><code class="language-cpp">template&lt;&gt;
template&lt;class T, class U&gt;
void add_scene&lt; Loki::Typelist&lt;T, U&gt; &gt;() 
{ 
}
</code></pre>
</blockquote>
<p>Nein auch nicht <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>Ich habe auch schon versucht, die Funktion außerhalb zu definieren und dort die Spezialisierung durchzuführen. Dies funktioniert leider auch nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2046999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2046999</guid><dc:creator><![CDATA[nocheinmitglied]]></dc:creator><pubDate>Sun, 10 Apr 2011 08:16:04 GMT</pubDate></item><item><title><![CDATA[Reply to template-member-function specialisation on Sun, 10 Apr 2011 09:22:32 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>In dem Fall hast du wohl ein Problem - C++ erlaubt keine partiellen Template-Spezialisierungen für Funktionen. Das heißt, du müsstest die Funktionalität auslagern in eine Hilfsfunktion und mit TMP-Methoden auswählen:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
struct selector
{
  typedef default_tpye type;
};

//partielle Spezialisierung von Klassen ist erlaubt ;)
template&lt;typename H, typename T&gt;
struct selector&lt; Loki::Typelist&lt;H,T&gt; &gt;
{
  typedef typelist type;
  typedef H first_type;
  typedef T second_type;
};

struct A
{
    template &lt;typename T&gt;void add_scene(const T&amp; param) 
    {
        add_scene_impl(param, typename selector&lt;T&gt;::type());
    }
    template&lt;typename T&gt;
    void add_scene_impl(const T&amp; param, default_type)
    {
        do_some_stuff();
    }
    template&lt;typename T&gt; 
    void add_scene_impl(const T&amp; param, typelist)
    {
        typedef typename selector&lt;T&gt;::first_type H;
        typedef typename selector&lt;T&gt;::second_type T;
        do_the_same_stuff_as_above();
    }
};
</code></pre>
<p>(ungetestet und ohne Garantie)</p>
<p>PS: Ist es eigentlich korrekt, daß deine add_scene-Methoden keine Parameter entgegennehmen?</p>
</blockquote>
<p>Hi, ich dachte parzielle template Spezialisierungen sind nur welche, bei denen die Funktion mehrere Parameter entgegen nimmt und nur 1 template Argument Spezialisert wird. Also etwa sowas</p>
<pre><code class="language-cpp">template&lt;typename T, typename U&gt;
void foo() {}
template&lt;typename T&gt;
void foo&lt;T,widget&gt;() {}
</code></pre>
<p>Dies würde in meinem Fall aber nicht auftreten. Ich spezialisiere alle Argumente.</p>
<p>Deine Implementierung sieht gut aus (besser als mein Workaround, bei der die Funktion innerhalb einer template Struktur definiert ist).</p>
<p>Werde dies nutzen. Danke <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>
<p>P.S. Ja, es ist richtig das meine add Funktion kein Objekt entgegen nimmt und nur Klassen, da meine Klasse die Objekte selber erstellt (mittels einer Objekt Fabrik) und nur wissen möchte, welche Klassen erstellt werden müssen/dürfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2047001</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2047001</guid><dc:creator><![CDATA[nocheinmitglied]]></dc:creator><pubDate>Sun, 10 Apr 2011 09:22:32 GMT</pubDate></item><item><title><![CDATA[Reply to template-member-function specialisation on Sun, 10 Apr 2011 08:39:04 GMT]]></title><description><![CDATA[<p>nocheinmitglied schrieb:</p>
<blockquote>
<p>Hi, ich dachte parzielle template Spezialisierungen sind nur welche, bei denen die Funktion mehrere Parameter entgegen nimmt und nur 1 template Argument Spezialisert wird. Also etwa sowas</p>
<pre><code class="language-cpp">template&lt;typename T, typename U&gt;
void foo() {}
template&lt;typename T&gt;
void foo&lt;T,widget&gt;() {}
</code></pre>
<p>Dies würde in meinem Fall aber nicht auftreten. Ich spezialisiere alle Argumente.</p>
</blockquote>
<p>Da ist der Denkfehler: partielle Spezialisierung bedeutet, daß du für eine Teilmenge der möglichen Datentypen bereitstellst, die selber wieder durch Template-Parameter sepzifiziert wird. Das betrifft auch Konstruktionen wie</p>
<pre><code class="language-cpp">template&lt;typename Cont&gt;
void foo();
template&lt;typename T&gt;
void foo&lt;std::vector&lt;T&gt; &gt;();
</code></pre>
<p>oder die Beziehung zwischen T und TypeList&lt;&gt; in deinem Code.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2047002</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2047002</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sun, 10 Apr 2011 08:39:04 GMT</pubDate></item><item><title><![CDATA[Reply to template-member-function specialisation on Sun, 10 Apr 2011 09:03:37 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>nocheinmitglied schrieb:</p>
<blockquote>
<p>Hi, ich dachte parzielle template Spezialisierungen sind nur welche, bei denen die Funktion mehrere Parameter entgegen nimmt und nur 1 template Argument Spezialisert wird. Also etwa sowas</p>
<pre><code class="language-cpp">template&lt;typename T, typename U&gt;
void foo() {}
template&lt;typename T&gt;
void foo&lt;T,widget&gt;() {}
</code></pre>
<p>Dies würde in meinem Fall aber nicht auftreten. Ich spezialisiere alle Argumente.</p>
</blockquote>
<p>Da ist der Denkfehler: partielle Spezialisierung bedeutet, daß du für eine Teilmenge der möglichen Datentypen bereitstellst, die selber wieder durch Template-Parameter sepzifiziert wird. Das betrifft auch Konstruktionen wie</p>
<pre><code class="language-cpp">template&lt;typename Cont&gt;
void foo();
template&lt;typename T&gt;
void foo&lt;std::vector&lt;T&gt; &gt;();
</code></pre>
<p>oder die Beziehung zwischen T und TypeList&lt;&gt; in deinem Code.</p>
</blockquote>
<p>oh, da habe ich wirklich etwas sehr falsch verstanden.<br />
Vielen Dank <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="🙂"
    /><br />
[solved]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2047009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2047009</guid><dc:creator><![CDATA[nocheinmitglied]]></dc:creator><pubDate>Sun, 10 Apr 2011 09:03:37 GMT</pubDate></item><item><title><![CDATA[Reply to template-member-function specialisation on Sun, 10 Apr 2011 09:15:59 GMT]]></title><description><![CDATA[<p>Darf man das Schlüsselwort default so einsetzen oder ist das nur irgend ein Name in deinem Fall?</p>
<p>Sonst sehr chic. <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="🙂"
    /><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="👍"
    /> Ich freue mich immer, so was lesen zu dürfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2047017</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2047017</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Sun, 10 Apr 2011 09:15:59 GMT</pubDate></item><item><title><![CDATA[Reply to template-member-function specialisation on Sun, 10 Apr 2011 09:21:40 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>Darf man das Schlüsselwort default so einsetzen oder ist das nur irgend ein Name in deinem Fall?</p>
</blockquote>
<p>Das war nur als Platzhalter gedacht. Müsste ich mal korrigieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2047022</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2047022</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sun, 10 Apr 2011 09:21:40 GMT</pubDate></item></channel></rss>