<?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[Implementierungen von Template-Klassen (teilweise) kapseln und verstecken]]></title><description><![CDATA[<p>Gibt es grundsätzlich Möglichkeiten, Implementierungen von Template-Klassen zu kapseln und zu verstecken?</p>
<p>Grundsätzlich muss ja die gesamte Definition mit im Header-File stehen. Gibt es aber Techniken/Idome, um Implementationen zu mindest teilweise aus der Header-Datei zu verbannen?</p>
<p>Konkretes Beispiel, wo ich das benötigen würde:</p>
<pre><code class="language-cpp">template&lt; class TModule &gt;
struct ModuleStarter : public TModule{
   ModuleStarter(TModule&amp; module) : TModule(module){ TModule::Start(); }
   ~ModuleStarter(){ TModule::Stop(); }
}
</code></pre>
<p>ModuleStarter startet und beendet Module. Wenn ich nun einen speziellen ModuleStarter implementieren möchte, der nun Betriebssystem-spezifische Dinge vor und nach dem Starten erledigen soll, wie macht man das am besten?</p>
<pre><code class="language-cpp">// Beispiel (Prinzip):

template&lt; class TModule &gt;
struct ConsoleModuleStarter : public TModule{
   ConsoleModuleStarter(TModule&amp; module) : TModule(module)
   {
        Run();
   }
   ~ConsoleModuleStarter(){ }

   void Run()
   {
        // Console anlegen
        // Consolen-Handler anlegen
        TModule::Start();
        // Wenn Abbruchsignal von Console kommt --&gt; TModule::Stop()
        // Wenn TModule::Start() beendet wurde --&gt; Konstruktor verlassen
   }
   void Stop(){ TModule::Stop(); /* Vorzeitiger Abbruch */ }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/244953/implementierungen-von-template-klassen-teilweise-kapseln-und-verstecken</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 01:28:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/244953.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 08 Jul 2009 07:18:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Implementierungen von Template-Klassen (teilweise) kapseln und verstecken on Wed, 08 Jul 2009 07:18:30 GMT]]></title><description><![CDATA[<p>Gibt es grundsätzlich Möglichkeiten, Implementierungen von Template-Klassen zu kapseln und zu verstecken?</p>
<p>Grundsätzlich muss ja die gesamte Definition mit im Header-File stehen. Gibt es aber Techniken/Idome, um Implementationen zu mindest teilweise aus der Header-Datei zu verbannen?</p>
<p>Konkretes Beispiel, wo ich das benötigen würde:</p>
<pre><code class="language-cpp">template&lt; class TModule &gt;
struct ModuleStarter : public TModule{
   ModuleStarter(TModule&amp; module) : TModule(module){ TModule::Start(); }
   ~ModuleStarter(){ TModule::Stop(); }
}
</code></pre>
<p>ModuleStarter startet und beendet Module. Wenn ich nun einen speziellen ModuleStarter implementieren möchte, der nun Betriebssystem-spezifische Dinge vor und nach dem Starten erledigen soll, wie macht man das am besten?</p>
<pre><code class="language-cpp">// Beispiel (Prinzip):

template&lt; class TModule &gt;
struct ConsoleModuleStarter : public TModule{
   ConsoleModuleStarter(TModule&amp; module) : TModule(module)
   {
        Run();
   }
   ~ConsoleModuleStarter(){ }

   void Run()
   {
        // Console anlegen
        // Consolen-Handler anlegen
        TModule::Start();
        // Wenn Abbruchsignal von Console kommt --&gt; TModule::Stop()
        // Wenn TModule::Start() beendet wurde --&gt; Konstruktor verlassen
   }
   void Stop(){ TModule::Stop(); /* Vorzeitiger Abbruch */ }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1738973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1738973</guid><dc:creator><![CDATA[Roger Wilco]]></dc:creator><pubDate>Wed, 08 Jul 2009 07:18:30 GMT</pubDate></item><item><title><![CDATA[Reply to Implementierungen von Template-Klassen (teilweise) kapseln und verstecken on Wed, 08 Jul 2009 07:23:41 GMT]]></title><description><![CDATA[<p>Du kannst natürlich deine Implementierungen in eine beliebige andere Datei auslagern, musst die halt am Ende des Header-Files includen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1738979</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1738979</guid><dc:creator><![CDATA[Möhre]]></dc:creator><pubDate>Wed, 08 Jul 2009 07:23:41 GMT</pubDate></item><item><title><![CDATA[Reply to Implementierungen von Template-Klassen (teilweise) kapseln und verstecken on Wed, 08 Jul 2009 08:02:22 GMT]]></title><description><![CDATA[<p>Ein etwas aufwändiger Weg (aber dafür sind die Methoden dann wirklich &quot;versteckt&quot;) wäre, wenn du entweder eine (weitere) Basisklasse oder aber ein Member der Klasse 'Console' anlegst und von deiner Template-Klasse 'ConsoleModuleStarter' dann entsprechende Methoden aufrufst.<br />
Und die Klasse 'Console' erstellst du dann ganz normal mit einer Source- und einer Header-Datei (und letztere dann einfach von deiner Template-Datei inkludieren).</p>
<p>Ich nehme dabei an, daß die Klasse 'Console' keine Template-Klasse ist und nicht abhängig von TModule!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1738994</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1738994</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Wed, 08 Jul 2009 08:02:22 GMT</pubDate></item><item><title><![CDATA[Reply to Implementierungen von Template-Klassen (teilweise) kapseln und verstecken on Wed, 08 Jul 2009 08:31:05 GMT]]></title><description><![CDATA[<p>Möhre schrieb:</p>
<blockquote>
<p>Du kannst natürlich deine Implementierungen in eine beliebige andere Datei auslagern, musst die halt am Ende des Header-Files includen.</p>
</blockquote>
<p>Dann würde ich nur gliedern, aber den Code nicht wirklich &quot;Verstecken&quot; im Sinne von Kapseln.</p>
<p>Th69  schrieb:</p>
<blockquote>
<p>Ein etwas aufwändiger Weg (aber dafür sind die Methoden dann wirklich &quot;versteckt&quot;) wäre, wenn du entweder eine (weitere) Basisklasse oder aber ein Member der Klasse 'Console' anlegst und von deiner Template-Klasse 'ConsoleModuleStarter' dann entsprechende Methoden aufrufst.<br />
Und die Klasse 'Console' erstellst du dann ganz normal mit einer Source- und einer Header-Datei (und letztere dann einfach von deiner Template-Datei inkludieren).</p>
<p>Ich nehme dabei an, daß die Klasse 'Console' keine Template-Klasse ist und nicht abhängig von TModule!</p>
</blockquote>
<p>Ja, so habe ich es auch erst einmal gemacht. Angenommen ich habe jetzt den Fall, dass die Klasse Console dann abhängig von TModule ist. Bzw. z.B. von einem Teil (Schnittstelle, Basisklasse). Gibt es da eine Möglichkeit, die Klasse Console und TModule über eine (Nicht-Template-Basisklasse) zu verknüpfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1739010</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1739010</guid><dc:creator><![CDATA[Roger Wilco]]></dc:creator><pubDate>Wed, 08 Jul 2009 08:31:05 GMT</pubDate></item><item><title><![CDATA[Reply to Implementierungen von Template-Klassen (teilweise) kapseln und verstecken on Wed, 08 Jul 2009 09:51:02 GMT]]></title><description><![CDATA[<p>Dann müßte TModule jeweils von einer nicht-template Basisklasse erben, so daß Console nur diese Basisklasse benutzt (mit virtuellen Methoden).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1739074</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1739074</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Wed, 08 Jul 2009 09:51:02 GMT</pubDate></item></channel></rss>