<?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 Problem]]></title><description><![CDATA[<p>Hallo,</p>
<p>entschuldigung für den ungenauen Titel, aber ich bin mir nicht sicher ob man das Problem kurz zusammenfassen kann...<br />
Es geht um folgendes: Ich habe eine template class, die ein template member hat. Zu diesem Member würde ich gerne spezialisieren, in etwa so:</p>
<pre><code class="language-cpp">template&lt;class X&gt;
class A
{
	template&lt;class Y&gt;
	void func()
	{
	}
	template&lt;&gt;
	void func&lt;X&gt;()
	{
	}
};
</code></pre>
<p>Das funktioniert auch mit Visual C++ 2010. Das Problem kommt erst, wenn ich den gcc benutze, weil der sich an den Standard hält, der anscheinend besagt, dass Spezialisierungen von template membern, die in einer template class definiert wurden, sich im diese umgebenden namespace befinden müssen (weiß wer ob das stimmt?).<br />
Meine Versuche waren dann sowas wie:</p>
<pre><code class="language-cpp">template&lt;class X&gt;
class A
{
	template&lt;class Y&gt;
	void func();
};
template&lt;&gt; template&lt;class Y&gt;
void A&lt;Y&gt;::func&lt;Y&gt;();
</code></pre>
<p>und</p>
<pre><code class="language-cpp">template&lt;class X&gt;
class A
{
	template&lt;class Y&gt;
	void func();
};
template&lt;class Y&gt; template&lt;&gt;
void A&lt;Y&gt;::func&lt;Y&gt;();
</code></pre>
<p>, was beides nicht funktionierte (auch in vc++ nicht).<br />
Hat wer irgendeine Idee wie bzw. ob ich das compiled bekomme?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/289831/template-problem</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 20:42:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/289831.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 13 Jul 2011 17:52:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template Problem on Wed, 13 Jul 2011 21:12:19 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>entschuldigung für den ungenauen Titel, aber ich bin mir nicht sicher ob man das Problem kurz zusammenfassen kann...<br />
Es geht um folgendes: Ich habe eine template class, die ein template member hat. Zu diesem Member würde ich gerne spezialisieren, in etwa so:</p>
<pre><code class="language-cpp">template&lt;class X&gt;
class A
{
	template&lt;class Y&gt;
	void func()
	{
	}
	template&lt;&gt;
	void func&lt;X&gt;()
	{
	}
};
</code></pre>
<p>Das funktioniert auch mit Visual C++ 2010. Das Problem kommt erst, wenn ich den gcc benutze, weil der sich an den Standard hält, der anscheinend besagt, dass Spezialisierungen von template membern, die in einer template class definiert wurden, sich im diese umgebenden namespace befinden müssen (weiß wer ob das stimmt?).<br />
Meine Versuche waren dann sowas wie:</p>
<pre><code class="language-cpp">template&lt;class X&gt;
class A
{
	template&lt;class Y&gt;
	void func();
};
template&lt;&gt; template&lt;class Y&gt;
void A&lt;Y&gt;::func&lt;Y&gt;();
</code></pre>
<p>und</p>
<pre><code class="language-cpp">template&lt;class X&gt;
class A
{
	template&lt;class Y&gt;
	void func();
};
template&lt;class Y&gt; template&lt;&gt;
void A&lt;Y&gt;::func&lt;Y&gt;();
</code></pre>
<p>, was beides nicht funktionierte (auch in vc++ nicht).<br />
Hat wer irgendeine Idee wie bzw. ob ich das compiled bekomme?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2092417</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092417</guid><dc:creator><![CDATA[GorbGorb]]></dc:creator><pubDate>Wed, 13 Jul 2011 21:12:19 GMT</pubDate></item><item><title><![CDATA[Reply to Template Problem on Wed, 13 Jul 2011 18:09:27 GMT]]></title><description><![CDATA[<p>Welche gcc-Version hast du denn verwendet?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2092424</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092424</guid><dc:creator><![CDATA[holzeimer]]></dc:creator><pubDate>Wed, 13 Jul 2011 18:09:27 GMT</pubDate></item><item><title><![CDATA[Reply to Template Problem on Wed, 13 Jul 2011 19:00:51 GMT]]></title><description><![CDATA[<p>Den von der MinGW Version vom 30.05... also nehm ich mal an gcc 4.5.3.</p>
<p>Edit: Ich hab grad noch was zum Thema gefunden:<br />
&quot;An explicit specialization is in the same namespace as the definition of the primary template.&quot; (Quelle: IBM C++ Referenz, <a href="http://publib.boulder.ibm.com/infocenter/comphelp/v111v131/index.jsp" rel="nofollow">http://publib.boulder.ibm.com/infocenter/comphelp/v111v131/index.jsp</a> )<br />
Erfüllt also der gcc den Standard hier nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2092430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092430</guid><dc:creator><![CDATA[GorbGorb]]></dc:creator><pubDate>Wed, 13 Jul 2011 19:00:51 GMT</pubDate></item><item><title><![CDATA[Reply to Template Problem on Wed, 13 Jul 2011 20:09:21 GMT]]></title><description><![CDATA[<p>Ich weiß nciht, ob das das problem ist, aber mir ist aufgefallen, dass du nach den funktionsdefinitionen ein semikolon gesetzt hast.</p>
<pre><code class="language-cpp">template&lt;class Y&gt;
void func()
{
};
template&lt;&gt;
void func&lt;X&gt;()
{
};
</code></pre>
<p>Mach daraus mal</p>
<pre><code class="language-cpp">template&lt;class Y&gt;
void func()
{
}
template&lt;&gt;
void func&lt;X&gt;()
{
}
</code></pre>
<p>Edit:<br />
Habs gerade ma getestet, macht nichts aus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2092465</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092465</guid><dc:creator><![CDATA[*Q* 1]]></dc:creator><pubDate>Wed, 13 Jul 2011 20:09:21 GMT</pubDate></item><item><title><![CDATA[Reply to Template Problem on Wed, 13 Jul 2011 21:12:03 GMT]]></title><description><![CDATA[<p>Ja in meinem Anwendungsfall waren das eigentlich Klassen, hab sie dann aber der Einfachheit halber durch Funktionen ersetzt (das ging dann wohl daneben^^)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2092487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2092487</guid><dc:creator><![CDATA[GorbGorb]]></dc:creator><pubDate>Wed, 13 Jul 2011 21:12:03 GMT</pubDate></item><item><title><![CDATA[Reply to Template Problem on Fri, 15 Jul 2011 14:10:48 GMT]]></title><description><![CDATA[<p>Auch wenns vielleicht niemanden mehr interessiert, ich hab die Lösung gefunden:</p>
<pre><code class="language-cpp">template&lt; class X &gt;
class TemplateClass
{
private:
    template&lt; class Y , class HelperParam &gt; 
    void functionIntern()
    {
        //unspezialisiert, ohne HelperParam zu verwenden
    }
    template&lt; class Y &gt;
    void functionIntern&lt;Y,Y&gt;()
    {
        //Spezialisierung nur für Y=X (warum, sieht man gleich)
        //Nur explizite Spezialisierungen müssen außerhalb der template class 
        //stehen (hat das eigentlich irgendeinen Grund?).
    ]
public:
    template&lt; class Y &gt;
    void function()
    {
        functionIntern&lt; Y , X &gt;();
        //Spezialisierte Version wird genau dann aufgerufen, wenn beide 
        //Parameter gleich sind, also Y=X
    }
};
</code></pre>
<p>Für eventuelle Syntaxfehler garantier ich nicht (hab ich jetzt so neu getippt), aber das Prinzip funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093178</guid><dc:creator><![CDATA[GorbGorb]]></dc:creator><pubDate>Fri, 15 Jul 2011 14:10:48 GMT</pubDate></item></channel></rss>