<?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[Templates Spezialisierung -&amp;gt; Header &#x2F; Source Trennung]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>Ja, ich weiss dass man Templates nicht in *.hpp und *.cpp trennen kann, hier geht es um was anderes, nämlich dass man es anscheinend unter gewissen Umständen muss. Zuerst ein kurzer Code, welcher als Grundlage für das Problem dient:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
struct MyClass
{
  T m_var;

  void foo();
}

template&lt;typename T&gt;
void MyClass&lt;T&gt;::foo()
{
  m_var = T();
}

// Vollständige Spezialisierung:
template&lt;&gt;
struct MyClass&lt;int&gt;
{
  double m_var;

  void foo();
}

void MyClass&lt;int&gt;::foo()
{
  m_var = 4.0;
}
</code></pre>
<p>Habe ich wie immer jeweils in einen Header gepackt, aber alles in den Header und keine Trennung, wie man es sich halt von den Templates gewohnt ist.</p>
<p>Als ich dann aber den Header für die Spezialisierung in zwei TUs eingebunden habe und kompilieren, bzw. linken, wollte, gab es ein Multiple Definition Problem und zwar die Funktion <code>foo</code> sei doppelt vorhanden. Aktuell habe ich der Funktionsdefinition einfach ein inline davor gesetzt, aber ein wenig überrascht war ich schon. Vor allem konnte ich nirgends etwas dazu finden.<br />
Können solche vollständig spezialisierten Templates, welche ja eigentlich von keinem Templateparameter abhängig sind, direkt in Header und Source aufgeteilt werden? Irgendwo würde es sogar Sinn ergeben, aber neu wäre es mir trotzdem.</p>
<p>Weiss jemand etwas näheres dazu?</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/242894/templates-spezialisierung-gt-header-source-trennung</link><generator>RSS for Node</generator><lastBuildDate>Sun, 20 Sep 2026 17:11:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/242894.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 09 Jun 2009 14:10:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Templates Spezialisierung -&amp;gt; Header &#x2F; Source Trennung on Tue, 09 Jun 2009 14:10:29 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>Ja, ich weiss dass man Templates nicht in *.hpp und *.cpp trennen kann, hier geht es um was anderes, nämlich dass man es anscheinend unter gewissen Umständen muss. Zuerst ein kurzer Code, welcher als Grundlage für das Problem dient:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
struct MyClass
{
  T m_var;

  void foo();
}

template&lt;typename T&gt;
void MyClass&lt;T&gt;::foo()
{
  m_var = T();
}

// Vollständige Spezialisierung:
template&lt;&gt;
struct MyClass&lt;int&gt;
{
  double m_var;

  void foo();
}

void MyClass&lt;int&gt;::foo()
{
  m_var = 4.0;
}
</code></pre>
<p>Habe ich wie immer jeweils in einen Header gepackt, aber alles in den Header und keine Trennung, wie man es sich halt von den Templates gewohnt ist.</p>
<p>Als ich dann aber den Header für die Spezialisierung in zwei TUs eingebunden habe und kompilieren, bzw. linken, wollte, gab es ein Multiple Definition Problem und zwar die Funktion <code>foo</code> sei doppelt vorhanden. Aktuell habe ich der Funktionsdefinition einfach ein inline davor gesetzt, aber ein wenig überrascht war ich schon. Vor allem konnte ich nirgends etwas dazu finden.<br />
Können solche vollständig spezialisierten Templates, welche ja eigentlich von keinem Templateparameter abhängig sind, direkt in Header und Source aufgeteilt werden? Irgendwo würde es sogar Sinn ergeben, aber neu wäre es mir trotzdem.</p>
<p>Weiss jemand etwas näheres dazu?</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1723885</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1723885</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 09 Jun 2009 14:10:29 GMT</pubDate></item><item><title><![CDATA[Reply to Templates Spezialisierung -&amp;gt; Header &#x2F; Source Trennung on Wed, 10 Jun 2009 13:51:11 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>eine explizite Spezialisierung muss überall dort *deklariert* sein, wo es zu<br />
einer Templateinstanziierung kommen kann. Da es sich aus Sicht der ODR bei einer<br />
expliziten Spezialisierung aber nicht mehr um ein Template handelt, darf eine<br />
solche Spezialisierung aber nur genau einmal definiert werden.</p>
<p>Für die Praxis heißt das: am Besten deklariert man die Spezialisierung zusammen<br />
mit dem Primärtemplate und definiert sie in einer eigenen cpp-Datei.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1724521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1724521</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Wed, 10 Jun 2009 13:51:11 GMT</pubDate></item></channel></rss>