<?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 Spezialisierung mit nicht integriertem Typ]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe ein Klassentemplate geschrieben, das ich in mehreren Projekten verwende. In ein paar von diesem Projekten benötige ich eine Spezialisierung für einen einzigen, nicht integrierten Typen. Die Spezialisierung unterscheidet sich nur durch einen zusätzlichen Methodenaufruf auf dem Typen.</p>
<p><strong>verkürzte</strong> Darstellung:</p>
<pre><code class="language-cpp">// Template
template&lt;typename T&gt;
class Classtemp {
public:
    Classtemp() : m_pMyPtr(0)
    {
    }

    ~Classtemp()
    {
        if(m_pMyPtr)
            m_pMyPtr-&gt;cleanUp();
    }

private

    T* m_pMyPtr;
};

// Spezialisierung
template&lt;&gt;
class Classtemp&lt;MyClass&gt; {
public:

    Classtemp() : m_pMyPtr(0)
    {
    }

    ~Classtemp()
    {
        if (m_pMyPtr)
        {
            m_pMyPtr-&gt;end();
            m_pMyPtr-&gt;cleanUp();
        }   
    }

private:

    MyClass* m_pMyPtr;
};
</code></pre>
<p>MyClass muss vor der Spezialisierung definiert sein, damit mein Compiler nicht meckert. MyClass ist aber in einer Bibliothek. Wenn ich dieses Klassentemplate bei vielen Projekten verwende, müsste ich in jedem Projekt die Bibliothek linken und den Header includieren. Dies muss ich auch machen in Projekten, in denen ich MyClass und damit auch die Spezialisierung nicht verwende.<br />
Gibt es eine Möglichkeit, dieses Klassentemplate in allen Projekten zu verwenden, ohne die Bibliothek in den Projekten linken zu müssen, in denen ich MyClass gar nicht verwende?</p>
<p>Vielen Dank im Voraus.</p>
<p>Gruss<br />
Gameco</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/235084/template-spezialisierung-mit-nicht-integriertem-typ</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 07:10:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/235084.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 25 Feb 2009 13:35:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template Spezialisierung mit nicht integriertem Typ on Wed, 25 Feb 2009 13:35:54 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe ein Klassentemplate geschrieben, das ich in mehreren Projekten verwende. In ein paar von diesem Projekten benötige ich eine Spezialisierung für einen einzigen, nicht integrierten Typen. Die Spezialisierung unterscheidet sich nur durch einen zusätzlichen Methodenaufruf auf dem Typen.</p>
<p><strong>verkürzte</strong> Darstellung:</p>
<pre><code class="language-cpp">// Template
template&lt;typename T&gt;
class Classtemp {
public:
    Classtemp() : m_pMyPtr(0)
    {
    }

    ~Classtemp()
    {
        if(m_pMyPtr)
            m_pMyPtr-&gt;cleanUp();
    }

private

    T* m_pMyPtr;
};

// Spezialisierung
template&lt;&gt;
class Classtemp&lt;MyClass&gt; {
public:

    Classtemp() : m_pMyPtr(0)
    {
    }

    ~Classtemp()
    {
        if (m_pMyPtr)
        {
            m_pMyPtr-&gt;end();
            m_pMyPtr-&gt;cleanUp();
        }   
    }

private:

    MyClass* m_pMyPtr;
};
</code></pre>
<p>MyClass muss vor der Spezialisierung definiert sein, damit mein Compiler nicht meckert. MyClass ist aber in einer Bibliothek. Wenn ich dieses Klassentemplate bei vielen Projekten verwende, müsste ich in jedem Projekt die Bibliothek linken und den Header includieren. Dies muss ich auch machen in Projekten, in denen ich MyClass und damit auch die Spezialisierung nicht verwende.<br />
Gibt es eine Möglichkeit, dieses Klassentemplate in allen Projekten zu verwenden, ohne die Bibliothek in den Projekten linken zu müssen, in denen ich MyClass gar nicht verwende?</p>
<p>Vielen Dank im Voraus.</p>
<p>Gruss<br />
Gameco</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1669978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1669978</guid><dc:creator><![CDATA[Gameco]]></dc:creator><pubDate>Wed, 25 Feb 2009 13:35:54 GMT</pubDate></item><item><title><![CDATA[Reply to Template Spezialisierung mit nicht integriertem Typ on Wed, 25 Feb 2009 13:37:38 GMT]]></title><description><![CDATA[<p>Ja, dazu packst du die Spezialisierung einfach in ein eigenes Header-File.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1669983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1669983</guid><dc:creator><![CDATA[Tippgeber]]></dc:creator><pubDate>Wed, 25 Feb 2009 13:37:38 GMT</pubDate></item><item><title><![CDATA[Reply to Template Spezialisierung mit nicht integriertem Typ on Wed, 25 Feb 2009 13:38:23 GMT]]></title><description><![CDATA[<p>Tippgeber schrieb:</p>
<blockquote>
<p>Ja, dazu packst du die Spezialisierung einfach in eine eigene Header-Datei.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1669984</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1669984</guid><dc:creator><![CDATA[Tippgeber]]></dc:creator><pubDate>Wed, 25 Feb 2009 13:38:23 GMT</pubDate></item><item><title><![CDATA[Reply to Template Spezialisierung mit nicht integriertem Typ on Wed, 25 Feb 2009 13:42:59 GMT]]></title><description><![CDATA[<p>Nein.</p>
<p>Du schreibst eine globale template Funktion cleanup die du für die jeweiligen spezielle Typen überlädst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1669987</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1669987</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Wed, 25 Feb 2009 13:42:59 GMT</pubDate></item><item><title><![CDATA[Reply to Template Spezialisierung mit nicht integriertem Typ on Wed, 25 Feb 2009 13:46:40 GMT]]></title><description><![CDATA[<p>Tippgeber schrieb:</p>
<blockquote>
<p>Ja, dazu packst du die Spezialisierung einfach in ein eigenes Header-File.</p>
</blockquote>
<p>Das ist zwar möglich, kann aber zu unerwünschtem Verhalten führen. Wenn ich aus Gewohnheit das allgemeine Klassentemplate includiere obwohl ich die Spezialisierung wollte, wird auch nur das allgemeine verwendet und MyClass-&gt;end() wird nicht aufgerufen.<br />
Das ist mir etwas zu unsicher (ich traue mir diesen Fehler durchaus zu <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> ).<br />
Als Notlösung ziehe ich es aber in Betracht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1669989</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1669989</guid><dc:creator><![CDATA[Gameco]]></dc:creator><pubDate>Wed, 25 Feb 2009 13:46:40 GMT</pubDate></item><item><title><![CDATA[Reply to Template Spezialisierung mit nicht integriertem Typ on Wed, 25 Feb 2009 13:55:48 GMT]]></title><description><![CDATA[<p>Gameco schrieb:</p>
<blockquote>
<p>Tippgeber schrieb:</p>
<blockquote>
<p>Ja, dazu packst du die Spezialisierung einfach in ein eigenes Header-File.</p>
</blockquote>
<p>Das ist zwar möglich, kann aber zu unerwünschtem Verhalten führen. Wenn ich aus Gewohnheit das allgemeine Klassentemplate includiere obwohl ich die Spezialisierung wollte, wird auch nur das allgemeine verwendet und MyClass-&gt;end() wird nicht aufgerufen.<br />
Das ist mir etwas zu unsicher (ich traue mir diesen Fehler durchaus zu <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> ).<br />
Als Notlösung ziehe ich es aber in Betracht.</p>
</blockquote>
<p>Hör auf Shade, ich habe mir deine Klasse nicht angeschaut nur die Organisation.</p>
<p>Du könntest natürlich auch per #define das Ganze lösen und per Präprozessor normalerweise nur myclass inkludieren und nur wenn NOMYCLASS definiert ist die normale Version. Dann passiert es nicht, dass du versehentlich dir normale Version für MyClass Objekte benutzt. Aber wie gesagt hör auf Shade.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1670002</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1670002</guid><dc:creator><![CDATA[Tippgeber]]></dc:creator><pubDate>Wed, 25 Feb 2009 13:55:48 GMT</pubDate></item></channel></rss>