<?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[Spezialisierung eines static-Funktiontemplates eines Klassentemplates]]></title><description><![CDATA[<p>Ich hab hier ein kleines Problem mit der Template Syntax. Vielleicht ist das Konstrukt so auch gar nicht möglich. Vielleicht kann mir einer von euch sagen wo der Denkfehler ist oder wie die richtige Syntax aussieht.</p>
<p>Hier mal ein vereinfachter Code:</p>
<pre><code>template&lt;typename T&gt;
class BaseClass {
void blubb() = 0;
/*...*/
public:
  template&lt;unsigned int var&gt;
  static BaseClass* Create();
};
</code></pre>
<p>Eine abgeleitete Klasse soll nun neben der Implementation eine spezialisierte Version von Create() für ein bestimmtes 'var' implementieren, welche ein Objekt der abgeleiteten Klasse erzeugt, castet und zurückgibt. Jetzt ist das Problem, wie sieht der genaue Syntax der spezialisierten Version aus?</p>
<p>Mein erster Ansatz:</p>
<pre><code>template&lt;typename T&gt;
inline BaseClass&lt;T&gt;* BaseClass&lt;T&gt;::Create&lt;1&gt;() {
	return static_cast&lt;BaseClass&lt;T&gt;*&gt;(new DerivedClass&lt;T&gt;());
}
</code></pre>
<p>Compiler wirft aber Fehler.</p>
<p>Ziel ist es mit einer Create-Funktion und dem wählbaren Templateparameter verschiedene Implemetationen der Basisklasse zu erzeugen, welche aber selbst ein Klassentemplate ist, was mich beim definieren der Funktion irgendwie verwirrt <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>
<p>Bin für jede Hilfe dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/268724/spezialisierung-eines-static-funktiontemplates-eines-klassentemplates</link><generator>RSS for Node</generator><lastBuildDate>Mon, 31 Aug 2026 15:12:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/268724.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 13 Jun 2010 16:50:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Spezialisierung eines static-Funktiontemplates eines Klassentemplates on Sun, 13 Jun 2010 16:50:21 GMT]]></title><description><![CDATA[<p>Ich hab hier ein kleines Problem mit der Template Syntax. Vielleicht ist das Konstrukt so auch gar nicht möglich. Vielleicht kann mir einer von euch sagen wo der Denkfehler ist oder wie die richtige Syntax aussieht.</p>
<p>Hier mal ein vereinfachter Code:</p>
<pre><code>template&lt;typename T&gt;
class BaseClass {
void blubb() = 0;
/*...*/
public:
  template&lt;unsigned int var&gt;
  static BaseClass* Create();
};
</code></pre>
<p>Eine abgeleitete Klasse soll nun neben der Implementation eine spezialisierte Version von Create() für ein bestimmtes 'var' implementieren, welche ein Objekt der abgeleiteten Klasse erzeugt, castet und zurückgibt. Jetzt ist das Problem, wie sieht der genaue Syntax der spezialisierten Version aus?</p>
<p>Mein erster Ansatz:</p>
<pre><code>template&lt;typename T&gt;
inline BaseClass&lt;T&gt;* BaseClass&lt;T&gt;::Create&lt;1&gt;() {
	return static_cast&lt;BaseClass&lt;T&gt;*&gt;(new DerivedClass&lt;T&gt;());
}
</code></pre>
<p>Compiler wirft aber Fehler.</p>
<p>Ziel ist es mit einer Create-Funktion und dem wählbaren Templateparameter verschiedene Implemetationen der Basisklasse zu erzeugen, welche aber selbst ein Klassentemplate ist, was mich beim definieren der Funktion irgendwie verwirrt <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>
<p>Bin für jede Hilfe dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1911764</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1911764</guid><dc:creator><![CDATA[HollaDieWaldfee]]></dc:creator><pubDate>Sun, 13 Jun 2010 16:50:21 GMT</pubDate></item><item><title><![CDATA[Reply to Spezialisierung eines static-Funktiontemplates eines Klassentemplates on Sun, 13 Jun 2010 17:53:20 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template&lt;typename T&gt;
template&lt;&gt;
inline BaseClass&lt;T&gt;* BaseClass&lt;T&gt;::Create&lt;1&gt;() {
   return static_cast&lt;BaseClass&lt;T&gt;*&gt;(new DerivedClass&lt;T&gt;());
}
</code></pre>
<p>(nur geraten, nicht ausprobiert)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1911786</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1911786</guid><dc:creator><![CDATA[vielleichtso?]]></dc:creator><pubDate>Sun, 13 Jun 2010 17:53:20 GMT</pubDate></item><item><title><![CDATA[Reply to Spezialisierung eines static-Funktiontemplates eines Klassentemplates on Mon, 14 Jun 2010 07:47:37 GMT]]></title><description><![CDATA[<p>Funktioniert leider nicht. Compiler bringt folgenden Fehler:<br />
&quot;Unzulässige Verwendung von expliziten Vorlagenargumenten.&quot;</p>
<p>Ich habs auch schon so probiert:</p>
<pre><code class="language-cpp">template&lt;&gt;
template&lt;typename T&gt;
inline BaseClass&lt;T&gt;* BaseClass&lt;T&gt;::Create&lt;1&gt;() {
   return static_cast&lt;BaseClass&lt;T&gt;*&gt;(new DerivedClass&lt;T&gt;());
}
</code></pre>
<p>Dann erkennt er allerding die Funktion nicht mehr als Spezialisierung und mit bspw. so einem Aufruf:</p>
<pre><code class="language-cpp">BaseClass&lt;int&gt;::Create&lt;1&gt;();
</code></pre>
<p>will er die unspezialisierte Version aufrufen, was zu einem Linkerfehler führt.</p>
<p>PS: Ich benutze übrigens MSVS2008</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1911922</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1911922</guid><dc:creator><![CDATA[HollaDieWaldfee]]></dc:creator><pubDate>Mon, 14 Jun 2010 07:47:37 GMT</pubDate></item></channel></rss>