<?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 Code verbergen]]></title><description><![CDATA[<p>Hi, gibt es eine Möglichkeit die Implementation von Funktionen in generischen Template-Klassen zu verstecken. Ich möchte vermeiden dass der Code sichtbar ist. Geht das? Evtl. mit dem Pimpl-Idom?</p>
<p>Gruß Templer</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/293101/template-code-verbergen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 14:00:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/293101.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 25 Sep 2011 19:27:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template Code verbergen on Sun, 25 Sep 2011 19:27:22 GMT]]></title><description><![CDATA[<p>Hi, gibt es eine Möglichkeit die Implementation von Funktionen in generischen Template-Klassen zu verstecken. Ich möchte vermeiden dass der Code sichtbar ist. Geht das? Evtl. mit dem Pimpl-Idom?</p>
<p>Gruß Templer</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2123581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123581</guid><dc:creator><![CDATA[Templer]]></dc:creator><pubDate>Sun, 25 Sep 2011 19:27:22 GMT</pubDate></item><item><title><![CDATA[Reply to Template Code verbergen on Sun, 25 Sep 2011 19:39:34 GMT]]></title><description><![CDATA[<p>Templer schrieb:</p>
<blockquote>
<p>Geht das?</p>
</blockquote>
<p>Nein. Du kannst die Implementation in seperate Headerfiles auslageren (Endung hpp, tcc, icc, etc.), aber sichtbar sind sie dann immer noch.</p>
<p>Immer gut ist jedoch, Teile, für die T nicht unbedingt notwendig ist, in normale Funktionen auszulagern (kannst auch T.xyz_member als Parameter übergeben). Dann wird der Bytecode weniger aufgebläht und du hast deine Trennung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2123584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123584</guid><dc:creator><![CDATA[templer]]></dc:creator><pubDate>Sun, 25 Sep 2011 19:39:34 GMT</pubDate></item><item><title><![CDATA[Reply to Template Code verbergen on Mon, 26 Sep 2011 00:32:02 GMT]]></title><description><![CDATA[<p>Aber dann schaut euch mal z.B. diese Vector-Klasse<br />
<a href="http://www.ipf.tuwien.ac.at/opals/opals_docu/Vector_8hpp_source.html" rel="nofollow">www.ipf.tuwien.ac.at/opals/opals_docu/Vector_8hpp_source.html</a><br />
an. Dort wird scheinbar das Pimpl-Idom verwendet um die Implementierung zu verbergen.</p>
<pre><code class="language-cpp">00047     class Impl;
00048     Impl *pimpl_;
</code></pre>
<p>Oder täusche ich mich diesbezüglich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2123664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123664</guid><dc:creator><![CDATA[Templer]]></dc:creator><pubDate>Mon, 26 Sep 2011 00:32:02 GMT</pubDate></item><item><title><![CDATA[Reply to Template Code verbergen on Mon, 26 Sep 2011 01:15:34 GMT]]></title><description><![CDATA[<p>Zunächst: Es handelt sich nicht um Template-Klassen, sondern um Klassen-Templates bzw. Klassenvorlagen. Generell muss der Code einer Klassenvorlage dem Compiler bekannt sein, wenn er eine Klasse daraus konkretisieren soll.</p>
<p>Wenn ich <a href="http://www.ipf.tuwien.ac.at/opals/opals_docu/classopals_1_1Vector.html" rel="nofollow">das hier</a> richtig lese, haben die für opals::Vector ein paar Klassen vorkonkretisiert, für die entsprechende Symbole dann aus der DLL exportiert werden. Das erreicht man durch <a href="http://publib.boulder.ibm.com/infocenter/lnxpcomp/v7v91/topic/com.ibm.vacpp7l.doc/language/ref/clrc16explicit_instantiation.htm" rel="nofollow">explizite Konkretisierung</a>, wobei die Klassenvorlage dann nur mit den vorkonkretisierten Parameterkombinationen benutzbar ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2123668</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123668</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Mon, 26 Sep 2011 01:15:34 GMT</pubDate></item><item><title><![CDATA[Reply to Template Code verbergen on Mon, 26 Sep 2011 05:58:26 GMT]]></title><description><![CDATA[<p>Was du machen kannst, ist eine gemeinsame Basisklasse machen, von der alle konkreten Instanzierungen ableiten. Diese Basisklasse könnte dann z.B. die Speicherverwaltung mittels void* enthalten, die abgeleiteten Klassen können dann casten. Das hat außerdem den Vorteil, dass der ausführbare Code kleiner wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2123683</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123683</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 26 Sep 2011 05:58:26 GMT</pubDate></item><item><title><![CDATA[Reply to Template Code verbergen on Mon, 26 Sep 2011 09:16:40 GMT]]></title><description><![CDATA[<p>Type Erasure ist auch eine häufig benutzte Technik, um verschiedene Implementierungen unter einem Typen anzusprechen und Template-Bloat zu vermeiden. Ist im Prinzip das, was Pi anspricht.</p>
<p>Verhindern, dass die konkreten Klassen mit einem Typ instanziiert werden, kann man nicht. Jedoch kann man die Abhängigkeiten klein halten, sodass nur ein kleiner Teil des Codes diesen Typen kennen muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2123744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123744</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 26 Sep 2011 09:16:40 GMT</pubDate></item><item><title><![CDATA[Reply to Template Code verbergen on Mon, 26 Sep 2011 09:45:01 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Das hat außerdem den Vorteil, dass der ausführbare Code kleiner wird.</p>
</blockquote>
<p>Und den Nachteil, dass (in den meisten Fällen) die Ausführungsgeschwindigkeit sinkt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2123759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123759</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 26 Sep 2011 09:45:01 GMT</pubDate></item><item><title><![CDATA[Reply to Template Code verbergen on Mon, 26 Sep 2011 10:26:02 GMT]]></title><description><![CDATA[<p>ProgChild schrieb:</p>
<blockquote>
<p>314159265358979 schrieb:</p>
<blockquote>
<p>Das hat außerdem den Vorteil, dass der ausführbare Code kleiner wird.</p>
</blockquote>
<p>Und den Nachteil, dass (in den meisten Fällen) die Ausführungsgeschwindigkeit sinkt.</p>
</blockquote>
<p>Wodurch soll hier die Geschwindigkeit sinken?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2123770</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123770</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 26 Sep 2011 10:26:02 GMT</pubDate></item><item><title><![CDATA[Reply to Template Code verbergen on Mon, 26 Sep 2011 13:06:43 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Wodurch soll hier die Geschwindigkeit sinken?</p>
</blockquote>
<p>Schon alleine dadurch, dass zusätzlicher Funktionsaufruf benötigt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2123857</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123857</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 26 Sep 2011 13:06:43 GMT</pubDate></item><item><title><![CDATA[Reply to Template Code verbergen on Mon, 26 Sep 2011 17:13:04 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Wodurch soll hier die Geschwindigkeit sinken?</p>
</blockquote>
<p>virtual ist eine Optimierungsgrenze. Insbesodnere wnen dann so lustige void*-Zeiger frickeleien hinzu kommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2123982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123982</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Mon, 26 Sep 2011 17:13:04 GMT</pubDate></item></channel></rss>