<?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 Funktionstemplates eines Klassentemplates]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Klassentemplate mit zwei templateparametern und möchte zusätzlich auch ein Funktionstemplate in der Klasse haben. Dieses Funktionstemplate möchte ich dann jedoch spezialisieren. Geht das überhaupt?</p>
<pre><code class="language-cpp">template &lt; class T, class U &gt;
class TestClass
{
template &lt; typename V &gt;
void Foo(const V&amp; data) {}

void update();
}

/* Nun möchte ich Foo() spezialisieren...ich denke mir das ungefähr so..geht aber nicht. */
template &lt; class T, class U &gt; 
template &lt; &gt; void TestClass&lt; T,U &gt;::Foo(const double&amp; data);

/* cpp-Datei */
template &lt; class T, class U &gt; 
template &lt; &gt; void TestClass&lt; T,U &gt;::Foo(const double&amp; data) { /*do something*/ }
</code></pre>
<p>Der Grund ist, dass ich eigentlich nur U spezialisiert haben möchte wenn Foo aufgerufen wird (sprich Foo() wird von update() aufgerufen und dann soll Foo spezialisiert reagieren können).</p>
<p>In diesem Moment frage ich mich auch, ob ich nicht einfach die Klasse partiell spezialisieren sollte? hmm, aber muss ich dann auch alle anderen memberfunktionen (wie bsp. update() oben) neu schreiben?</p>
<p>Gibt es einen gänzlich besseren Weg?</p>
<p>Danke schonmal</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/304234/spezialisierung-eines-funktionstemplates-eines-klassentemplates</link><generator>RSS for Node</generator><lastBuildDate>Mon, 10 Aug 2026 00:49:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/304234.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 01 Jun 2012 14:11:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Spezialisierung eines Funktionstemplates eines Klassentemplates on Fri, 01 Jun 2012 14:11:05 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Klassentemplate mit zwei templateparametern und möchte zusätzlich auch ein Funktionstemplate in der Klasse haben. Dieses Funktionstemplate möchte ich dann jedoch spezialisieren. Geht das überhaupt?</p>
<pre><code class="language-cpp">template &lt; class T, class U &gt;
class TestClass
{
template &lt; typename V &gt;
void Foo(const V&amp; data) {}

void update();
}

/* Nun möchte ich Foo() spezialisieren...ich denke mir das ungefähr so..geht aber nicht. */
template &lt; class T, class U &gt; 
template &lt; &gt; void TestClass&lt; T,U &gt;::Foo(const double&amp; data);

/* cpp-Datei */
template &lt; class T, class U &gt; 
template &lt; &gt; void TestClass&lt; T,U &gt;::Foo(const double&amp; data) { /*do something*/ }
</code></pre>
<p>Der Grund ist, dass ich eigentlich nur U spezialisiert haben möchte wenn Foo aufgerufen wird (sprich Foo() wird von update() aufgerufen und dann soll Foo spezialisiert reagieren können).</p>
<p>In diesem Moment frage ich mich auch, ob ich nicht einfach die Klasse partiell spezialisieren sollte? hmm, aber muss ich dann auch alle anderen memberfunktionen (wie bsp. update() oben) neu schreiben?</p>
<p>Gibt es einen gänzlich besseren Weg?</p>
<p>Danke schonmal</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2218153</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2218153</guid><dc:creator><![CDATA[Katachi]]></dc:creator><pubDate>Fri, 01 Jun 2012 14:11:05 GMT</pubDate></item><item><title><![CDATA[Reply to Spezialisierung eines Funktionstemplates eines Klassentemplates on Fri, 01 Jun 2012 14:21:15 GMT]]></title><description><![CDATA[<p>Katachi schrieb:</p>
<blockquote>
<p>Gibt es einen gänzlich besseren Weg?</p>
</blockquote>
<p>Wieso überhaupt spezialisieren? Inwiefern ist das Verhalten da anders? Vielleicht suchst du Type Traits, aber dazu kenn' ich den Kontext zu wenig...<br />
Template-Funktionen darfst du übrigens nicht in Source&amp;Header aufteilen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2218158</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2218158</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 01 Jun 2012 14:21:15 GMT</pubDate></item><item><title><![CDATA[Reply to Spezialisierung eines Funktionstemplates eines Klassentemplates on Fri, 01 Jun 2012 14:31:52 GMT]]></title><description><![CDATA[<p>Hacker schrieb:</p>
<blockquote>
<p>Katachi schrieb:</p>
<blockquote>
<p>Gibt es einen gänzlich besseren Weg?</p>
</blockquote>
<p>Wieso überhaupt spezialisieren? Inwiefern ist das Verhalten da anders?</p>
</blockquote>
<p>Weil Foo auf Member des jeweiligen Typen zugreifen soll. Und ein Typ hat diese Member nicht, deswegen wäre eine Spezialisierung (die letzlich nichts macht) für diesen Typ, eine schnelle und einfach Art das Problem zu lösen. Denke type traits würde hier nicht passen oder?</p>
<blockquote>
<p>Template-Funktionen darfst du übrigens nicht in Source&amp;Header aufteilen.</p>
</blockquote>
<p>Doch, da es sich um eine spezialisierung handelt muss sie sogar in die source datei sonst ist sie doppelt vorhanden bei der Kompilierung. Oder was meinst du?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2218164</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2218164</guid><dc:creator><![CDATA[Katachi]]></dc:creator><pubDate>Fri, 01 Jun 2012 14:31:52 GMT</pubDate></item><item><title><![CDATA[Reply to Spezialisierung eines Funktionstemplates eines Klassentemplates on Fri, 01 Jun 2012 14:44:35 GMT]]></title><description><![CDATA[<p>Okay, ich habe es jetzt so gelöst, dass ich das Funktionstemplate aus dem Klassentemplate genommen habe und dann spezialisiert habe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2218173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2218173</guid><dc:creator><![CDATA[Katachi]]></dc:creator><pubDate>Fri, 01 Jun 2012 14:44:35 GMT</pubDate></item><item><title><![CDATA[Reply to Spezialisierung eines Funktionstemplates eines Klassentemplates on Fri, 01 Jun 2012 15:23:27 GMT]]></title><description><![CDATA[<p>Das Funktionstemplate solltest du vermutlich lieber überladen als spezialisieren:</p>
<pre><code class="language-cpp">template &lt; class T, class U &gt;
class TestClass
{
template &lt; typename V &gt;
void Foo(const V&amp; data) {}

void Foo(double const&amp; d) {}

void update();
};
</code></pre>
<p>Aber bei so einem allgemeinen Beisoiel kann man nicht sagen, ob du nicht doch einen der wenigen Sonderfälle hast, wo spezialisierung angebracht ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2218182</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2218182</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 01 Jun 2012 15:23:27 GMT</pubDate></item><item><title><![CDATA[Reply to Spezialisierung eines Funktionstemplates eines Klassentemplates on Fri, 01 Jun 2012 15:24:40 GMT]]></title><description><![CDATA[<p>Katachi schrieb:</p>
<blockquote>
<p>Okay, ich habe es jetzt so gelöst, dass ich das Funktionstemplate aus dem Klassentemplate genommen habe und dann spezialisiert habe.</p>
</blockquote>
<p>Funktionen will man idR nicht spezialisieren sondern einfach Überladen. Das löst meistens die Probleme...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2218184</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2218184</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 01 Jun 2012 15:24:40 GMT</pubDate></item><item><title><![CDATA[Reply to Spezialisierung eines Funktionstemplates eines Klassentemplates on Fri, 01 Jun 2012 15:34:46 GMT]]></title><description><![CDATA[<p>Katachi schrieb:</p>
<blockquote>
<p>Hacker schrieb:</p>
<blockquote>
<p>Katachi schrieb:</p>
<blockquote>
<p>Gibt es einen gänzlich besseren Weg?</p>
</blockquote>
<p>Wieso überhaupt spezialisieren? Inwiefern ist das Verhalten da anders?</p>
</blockquote>
<p>Weil Foo auf Member des jeweiligen Typen zugreifen soll. Und ein Typ hat diese Member nicht, deswegen wäre eine Spezialisierung (die letzlich nichts macht) für diesen Typ, eine schnelle und einfach Art das Problem zu lösen. Denke type traits würde hier nicht passen oder?</p>
</blockquote>
<p>Nein. Mach ein <code>static_assert</code> oder <code>enable_if</code> ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2218190</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2218190</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 01 Jun 2012 15:34:46 GMT</pubDate></item><item><title><![CDATA[Reply to Spezialisierung eines Funktionstemplates eines Klassentemplates on Fri, 01 Jun 2012 16:00:09 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Das Funktionstemplate solltest du vermutlich lieber überladen als spezialisieren:</p>
<pre><code class="language-cpp">template &lt; class T, class U &gt;
class TestClass
{
template &lt; typename V &gt;
void Foo(const V&amp; data) {}

void Foo(double const&amp; d) {}

void update();
};
</code></pre>
<p>Aber bei so einem allgemeinen Beisoiel kann man nicht sagen, ob du nicht doch einen der wenigen Sonderfälle hast, wo spezialisierung angebracht ist.</p>
</blockquote>
<p>oh man, so einfach kann es sein... Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2218201</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2218201</guid><dc:creator><![CDATA[Katachi]]></dc:creator><pubDate>Fri, 01 Jun 2012 16:00:09 GMT</pubDate></item><item><title><![CDATA[Reply to Spezialisierung eines Funktionstemplates eines Klassentemplates on Fri, 01 Jun 2012 16:07:43 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>Katachi schrieb:</p>
<blockquote>
<p>Okay, ich habe es jetzt so gelöst, dass ich das Funktionstemplate aus dem Klassentemplate genommen habe und dann spezialisiert habe.</p>
</blockquote>
<p>Funktionen will man idR nicht spezialisieren sondern einfach Überladen. Das löst meistens die Probleme...</p>
</blockquote>
<p>thx, ist abgespeichert. <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/2218204</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2218204</guid><dc:creator><![CDATA[Katachi]]></dc:creator><pubDate>Fri, 01 Jun 2012 16:07:43 GMT</pubDate></item></channel></rss>