<?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: Trick: *.h und *.cpp]]></title><description><![CDATA[<p>Ich habe irgendwann eine FDrage hier im Forum gestellt und ide ANtwort war:' Nein es ist nicht möglich bei Templates header und cpp zu separieren'<br />
EIn KOllege hat einen Umweg gefunden und ich dachte das zu Diskussion zu stellen im Forum:</p>
<p>Also die Lösung wäre: am ENde im cpp Datei, nach der Implementierung aller Funktionen macht man eine explizite Instanziierung für alle statischen Funktionen und alle Datentypen die man in Verbindung mit der Template benutzen möchte und es funktioniert...es ist vielleicht nicht so ellegant aber dafür hat man die *.h-Dateien und *.Cpp-Dateien getrennt.</p>
<p>ZUM BEISPIEL</p>
<pre><code>// Explicit instanziation
template class CVector3&lt;int&gt;;
template CVector3&lt;int&gt; operator* ( const int, const CVector3&lt;int&gt;&amp; );
template CVector3&lt;int&gt; operator* ( const CVector3&lt;int&gt;&amp; lhs, const CVector3&lt;int&gt;&amp; rhs );
template CVector3&lt;int&gt; operator/ ( const CVector3&lt;int&gt;&amp; lhs, const CVector3&lt;int&gt;&amp; rhs );

template class CVector3&lt;float&gt;;
template CVector3&lt;float&gt; operator* ( const float, const CVector3&lt;float&gt;&amp; );
template CVector3&lt;float&gt; operator* ( const CVector3&lt;float&gt;&amp; lhs, const CVector3&lt;float&gt;&amp; rhs );
template CVector3&lt;float&gt; operator/ ( const CVector3&lt;float&gt;&amp; lhs, const CVector3&lt;float&gt;&amp; rhs );

template class CVector3&lt;double&gt;;
template CVector3&lt;double&gt; operator* ( const double, const CVector3&lt;double&gt;&amp; );
template CVector3&lt;double&gt; operator* ( const CVector3&lt;double&gt;&amp; lhs, const CVector3&lt;double&gt;&amp; rhs );
template CVector3&lt;double&gt; operator/ ( const CVector3&lt;double&gt;&amp; lhs, const CVector3&lt;double&gt;&amp; rhs );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/142499/template-trick-h-und-cpp</link><generator>RSS for Node</generator><lastBuildDate>Tue, 01 Sep 2026 21:57:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/142499.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 31 Mar 2006 06:29:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template: Trick: *.h und *.cpp on Fri, 31 Mar 2006 06:29:45 GMT]]></title><description><![CDATA[<p>Ich habe irgendwann eine FDrage hier im Forum gestellt und ide ANtwort war:' Nein es ist nicht möglich bei Templates header und cpp zu separieren'<br />
EIn KOllege hat einen Umweg gefunden und ich dachte das zu Diskussion zu stellen im Forum:</p>
<p>Also die Lösung wäre: am ENde im cpp Datei, nach der Implementierung aller Funktionen macht man eine explizite Instanziierung für alle statischen Funktionen und alle Datentypen die man in Verbindung mit der Template benutzen möchte und es funktioniert...es ist vielleicht nicht so ellegant aber dafür hat man die *.h-Dateien und *.Cpp-Dateien getrennt.</p>
<p>ZUM BEISPIEL</p>
<pre><code>// Explicit instanziation
template class CVector3&lt;int&gt;;
template CVector3&lt;int&gt; operator* ( const int, const CVector3&lt;int&gt;&amp; );
template CVector3&lt;int&gt; operator* ( const CVector3&lt;int&gt;&amp; lhs, const CVector3&lt;int&gt;&amp; rhs );
template CVector3&lt;int&gt; operator/ ( const CVector3&lt;int&gt;&amp; lhs, const CVector3&lt;int&gt;&amp; rhs );

template class CVector3&lt;float&gt;;
template CVector3&lt;float&gt; operator* ( const float, const CVector3&lt;float&gt;&amp; );
template CVector3&lt;float&gt; operator* ( const CVector3&lt;float&gt;&amp; lhs, const CVector3&lt;float&gt;&amp; rhs );
template CVector3&lt;float&gt; operator/ ( const CVector3&lt;float&gt;&amp; lhs, const CVector3&lt;float&gt;&amp; rhs );

template class CVector3&lt;double&gt;;
template CVector3&lt;double&gt; operator* ( const double, const CVector3&lt;double&gt;&amp; );
template CVector3&lt;double&gt; operator* ( const CVector3&lt;double&gt;&amp; lhs, const CVector3&lt;double&gt;&amp; rhs );
template CVector3&lt;double&gt; operator/ ( const CVector3&lt;double&gt;&amp; lhs, const CVector3&lt;double&gt;&amp; rhs );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1027645</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1027645</guid><dc:creator><![CDATA[carmen]]></dc:creator><pubDate>Fri, 31 Mar 2006 06:29:45 GMT</pubDate></item><item><title><![CDATA[Reply to Template: Trick: *.h und *.cpp on Fri, 31 Mar 2006 06:33:04 GMT]]></title><description><![CDATA[<p>Wenn du genau weißt, daß du das Template nur mit diesen drei Datentypen verwenden willst, ist das gar kein Problem - aber sobald irgendwer auf die Idee kommt, einen CVector3&lt;long&gt; oder CVector3&lt;MyInt&gt; anzulegen, steht der Linker wieder vor dem alten Problem &quot;wo ist die Implementation von operator*(long,const Vector3&lt;long&gt;&amp;)?&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1027650</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1027650</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 31 Mar 2006 06:33:04 GMT</pubDate></item><item><title><![CDATA[Reply to Template: Trick: *.h und *.cpp on Fri, 31 Mar 2006 07:06:18 GMT]]></title><description><![CDATA[<p>Es ist halt ein anderes Instanziierungs-Modell.</p>
<p>So bist du in der Pflicht, alle Instanziierungen in diese Datei zu schreiben, bzw. in irgendeine Übersetzungseineit, die dann dazu gelinkt wird.</p>
<p>Dafür hast du die Kontrolle darüber, was wann wo instanziiert wird. Nützlich falls der Compiler in jeder Übersetzungseinheit das Template XY neu instanziiert. (was er wohl dürfte, auch wenn das sicher nicht die ruhmreicheste Implementierung wäre) Ebenfalls nützlich, falls du nicht willst, dass das Template für Typ AB instanziiert wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1027667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1027667</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Fri, 31 Mar 2006 07:06:18 GMT</pubDate></item><item><title><![CDATA[Reply to Template: Trick: *.h und *.cpp on Fri, 31 Mar 2006 07:07:09 GMT]]></title><description><![CDATA[<p>JA! das ist der einzige Nachteil...jedesmal wenn ein neues Datentyp habe, muss ich dieses Teil der expliziten Instaziierung erweitern...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1027668</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1027668</guid><dc:creator><![CDATA[carmen]]></dc:creator><pubDate>Fri, 31 Mar 2006 07:07:09 GMT</pubDate></item><item><title><![CDATA[Reply to Template: Trick: *.h und *.cpp on Fri, 31 Mar 2006 07:11:36 GMT]]></title><description><![CDATA[<p>Danke 7H3N4C3R! Es ist eine sehr gute Erklärung für mich!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1027671</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1027671</guid><dc:creator><![CDATA[carmen]]></dc:creator><pubDate>Fri, 31 Mar 2006 07:11:36 GMT</pubDate></item><item><title><![CDATA[Reply to Template: Trick: *.h und *.cpp on Fri, 31 Mar 2006 07:47:45 GMT]]></title><description><![CDATA[<p>Falls du tief in die Materie einsteigen willst, kann ich dir dieses Buch hier empfehlen. Es ist allerdings recht anspruchsvoll und nicht unbedingt günstig. Lies am besten mal die Rezension von Marc++us.</p>
<p>~klick mich~<br />
<a href="https://duckduckgo.com/?q=isbn+0201734842&amp;cppnetbooks" rel="nofollow">C++ Templates | ISBN: 0201734842</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1027703</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1027703</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Fri, 31 Mar 2006 07:47:45 GMT</pubDate></item><item><title><![CDATA[Reply to Template: Trick: *.h und *.cpp on Fri, 31 Mar 2006 08:25:09 GMT]]></title><description><![CDATA[<p>Danke für die Buchempfelung! Ich habe das Buch und ich habe auch anderen 3 Bücher von Josuttis. Very good ist auch ...The C++ Standard Library.</p>
<p>JA! SEite 159 im Buch C++ Templates von Josuttis ist es alles mit explicit instatiation...DANKE Ich habe das Buch aber ich habe nicht richtig da rein geschaut.<br />
CIAO</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1027723</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1027723</guid><dc:creator><![CDATA[carmen]]></dc:creator><pubDate>Fri, 31 Mar 2006 08:25:09 GMT</pubDate></item><item><title><![CDATA[Reply to Template: Trick: *.h und *.cpp on Fri, 31 Mar 2006 12:43:15 GMT]]></title><description><![CDATA[<p>Falls man sich eh schon auf festgelegte Datentypen einigt, könnte man es doch so machen:</p>
<pre><code class="language-cpp">#define DEFINE_TEMPLATE_CLASS_FOR_TYPE(type) \
template&lt;type&gt; void my_class::abc(type a) { ...; }
template&lt;type&gt; void my_class::xyz(type x) { ...; }

DEFINE_TEMPLATE_CLASS_FOR_TYPE(int);
DEFINE_TEMPLATE_CLASS_FOR_TYPE(float);
DEFINE_TEMPLATE_CLASS_FOR_TYPE(double);
DEFINE_TEMPLATE_CLASS_FOR_TYPE(MyOwnFrickeledClass);
</code></pre>
<p>o.O</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1027973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1027973</guid><dc:creator><![CDATA[achkeineahnung]]></dc:creator><pubDate>Fri, 31 Mar 2006 12:43:15 GMT</pubDate></item><item><title><![CDATA[Reply to Template: Trick: *.h und *.cpp on Fri, 31 Mar 2006 17:13:02 GMT]]></title><description><![CDATA[<p>Hallo,<br />
dann würde ich doch eher zum Instantiator-Idiom von Eric Niebler raten.<br />
<a href="http://www.cuj.com/documents/s=8683/cuj0310niebler/" rel="nofollow">http://www.cuj.com/documents/s=8683/cuj0310niebler/</a><br />
Eine Uraltversion gibt es hier:</p>
<p><a href="http://www.geocities.com/eric_niebler/instantiator.html" rel="nofollow">http://www.geocities.com/eric_niebler/instantiator.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1028211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1028211</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Fri, 31 Mar 2006 17:13:02 GMT</pubDate></item></channel></rss>