<?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[C++ Template Klasse]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich wollte euch fragen wie ihr bei der Implementation einer Template-Klasse vorgeht?</p>
<p>Ich benutze die GNU Compiler Collection und mir scheint das der g++ ein Template nicht in eine .so (oder .dll unter Win) packen kann. Ist ja nach Stroustrup auch so gewollt aber trotzdem schade.</p>
<p>Daher hole ich die Header- und Source-Dateien jedesmal per &quot;#include&quot; in meinen Code rein.</p>
<p>Daher meine Fragen:</p>
<p>Trennt ihr Header- und Source-Dateien (bzw. .h und .cpp)?</p>
<p>Und wenn ja, wo packt ihr die Source-Dateien hin? Ins selbe Verzeichnis wie die Header-Dateien? Unter Unix ist das bei mir das &quot;/usr/include&quot;-Verzeichnis.</p>
<p>Besten Dank</p>
<p>Goran</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/207880/c-template-klasse</link><generator>RSS for Node</generator><lastBuildDate>Sun, 11 Oct 2026 09:52:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/207880.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 12 Mar 2008 14:32:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to C++ Template Klasse on Wed, 12 Mar 2008 14:32:35 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich wollte euch fragen wie ihr bei der Implementation einer Template-Klasse vorgeht?</p>
<p>Ich benutze die GNU Compiler Collection und mir scheint das der g++ ein Template nicht in eine .so (oder .dll unter Win) packen kann. Ist ja nach Stroustrup auch so gewollt aber trotzdem schade.</p>
<p>Daher hole ich die Header- und Source-Dateien jedesmal per &quot;#include&quot; in meinen Code rein.</p>
<p>Daher meine Fragen:</p>
<p>Trennt ihr Header- und Source-Dateien (bzw. .h und .cpp)?</p>
<p>Und wenn ja, wo packt ihr die Source-Dateien hin? Ins selbe Verzeichnis wie die Header-Dateien? Unter Unix ist das bei mir das &quot;/usr/include&quot;-Verzeichnis.</p>
<p>Besten Dank</p>
<p>Goran</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1472935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1472935</guid><dc:creator><![CDATA[goran]]></dc:creator><pubDate>Wed, 12 Mar 2008 14:32:35 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Template Klasse on Wed, 12 Mar 2008 15:47:36 GMT]]></title><description><![CDATA[<p>goran schrieb:</p>
<blockquote>
<p>Ich benutze die GNU Compiler Collection und mir scheint das der g++ ein Template nicht in eine .so (oder .dll unter Win) packen kann. Ist ja nach Stroustrup auch so gewollt aber trotzdem schade.</p>
<p>Daher hole ich die Header- und Source-Dateien jedesmal per &quot;#include&quot; in meinen Code rein.</p>
</blockquote>
<p>Das ist auch voellig richtig so. Templates sind nur Schablonen, aus denen der Compiler automatisch Code erzeugt wenn der Code gebruacht wird. Daher kann aus template-definitionen anders als bei normalen Klassen udn Funktionen nicht von vornherein Code erzeugt werden, der in eine Objektdatei gepackt werden koennte. Der Code fuer Klassentemplates wird erst dann erzeugt, wenn das template irgendwo instantiiert wird. In dem Sine koennte man sagen, dass es fuer templates garkeine richtigen Source-Dateien gibt und eigentlich alles in den Header geschrieben werden kann/sollte. Es gibt drei leicht unterschiedliche Vorgehensweisen:</p>
<ol>
<li>Schreibe die Definitionen von Methoden bei Klassentemplates gleich in die Definition der Klasse. Du erhaelst eine einzelne Headerdatei, die bei groesseren Klassen allerdings relativ unuebersichtlich sein kann.</li>
<li>Schreibe die Definitionen wie gewohnt in eine gesonderte &quot;Source&quot;-Datei. Da du diese aber sowieso immer mit #includen musst, bindest du sie gleich am Ende der Headerdatei ein.</li>
<li>Schreibe die Definitionen der Methoden gleich hinter die Klassendefinition mit in den Header, das hat den gleichen Effekt wie bei 2), nur laesst man die &quot;source&quot;-datei weg.</li>
</ol>
<pre><code class="language-cpp">//Variante 1)
//=======================
template &lt;class T&gt;
class Beispiel {
public:
  void foo() {cout &lt;&lt; &quot;juhu&quot;;}
};

//Variante 2)
//==beispiel.hpp==========
template &lt;class T&gt;
class Beispiel {
public:
  void foo();
};
#include beispiel.ctp
//==beispiel.ctp==========
template&lt;class T&gt;
void Beispiel&lt;T&gt;::foo()
 {cout &lt;&lt; &quot;juhu&quot;;}

//Variante 3)
//==========================
template &lt;class T&gt;
class Beispiel {
public:
  void foo();
};

template&lt;class T&gt;
void Beispiel&lt;T&gt;::foo()
 {cout &lt;&lt; &quot;juhu&quot;;}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1473028</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1473028</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 12 Mar 2008 15:47:36 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Template Klasse on Wed, 12 Mar 2008 16:18:59 GMT]]></title><description><![CDATA[<p>Vielen Dank für die ausführliche Antwort. Ich war mir bisher unsicher welche Methoden genutzt werden.</p>
<p>Beste Grüße, Goran</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1473090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1473090</guid><dc:creator><![CDATA[goran]]></dc:creator><pubDate>Wed, 12 Mar 2008 16:18:59 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Template Klasse on Wed, 12 Mar 2008 17:00:22 GMT]]></title><description><![CDATA[<p>Kleiner Nachtrag: Nicht erwaehnt habe ich das Schluesselwort <code>export</code> , das im Standard vorgesehen ist um sowas aehnliches wie die Trennung von Deklaration und Definition bei templates vorzunehmen, aber eben nur sowas aehnliches. Hab da in nem Buch (ich meine es war Sutter/Alexandrescu::C++ coding Styles) was drueber gelesen, in der Kurzform hiess es da in etwa:<br />
- export tut nicht das, was man sich eigentlich naiv drunter vorstellt<br />
- es wird nur von einem Compiler unterstuetzt<br />
- wirklich besser als das inclusion model (was wir alle kennen, siehe oben) ist es auch nicht<br />
=&gt; nice to know, mehr aber auch nicht, da praktisch nicht anwendbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1473134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1473134</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 12 Mar 2008 17:00:22 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Template Klasse on Wed, 12 Mar 2008 17:09:02 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Kleiner Nachtrag: Nicht erwaehnt habe ich das Schluesselwort <code>export</code> , das im Standard vorgesehen ist um sowas aehnliches wie die Trennung von Deklaration und Definition bei templates vorzunehmen, aber eben nur sowas aehnliches. Hab da in nem Buch (ich meine es war Sutter/Alexandrescu::C++ coding Styles) was drueber gelesen, in der Kurzform hiess es da in etwa:<br />
- export tut nicht das, was man sich eigentlich naiv drunter vorstellt<br />
- es wird nur von einem Compiler unterstuetzt<br />
- wirklich besser als das inclusion model (was wir alle kennen, siehe oben) ist es auch nicht<br />
=&gt; nice to know, mehr aber auch nicht, da praktisch nicht anwendbar.</p>
</blockquote>
<p>Und der Compiler, der das unterstützt ist <a href="http://www.comeaucomputing.com/" rel="nofollow">Comeau</a>.<br />
Nur so als ergänzende Info. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1473145</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1473145</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 12 Mar 2008 17:09:02 GMT</pubDate></item></channel></rss>