<?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[Templateklasse, Art specialization]]></title><description><![CDATA[<p>Hi <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>
<p>Ich habe eine Templateklasse mit einer Vielzahl an Methoden.</p>
<p>Eine Methode allerdings muss bei einigen Typen gänzlich anders implementiert werden.</p>
<p>Wie kann ich das Template spezialisieren, ohne die anderen Funktionen auch alle neu schreiben zu müssen?</p>
<p>Grüße,<br />
Ethon</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/278598/templateklasse-art-specialization</link><generator>RSS for Node</generator><lastBuildDate>Tue, 25 Aug 2026 04:19:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/278598.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 09 Dec 2010 15:18:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Templateklasse, Art specialization on Thu, 09 Dec 2010 15:18:35 GMT]]></title><description><![CDATA[<p>Hi <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>
<p>Ich habe eine Templateklasse mit einer Vielzahl an Methoden.</p>
<p>Eine Methode allerdings muss bei einigen Typen gänzlich anders implementiert werden.</p>
<p>Wie kann ich das Template spezialisieren, ohne die anderen Funktionen auch alle neu schreiben zu müssen?</p>
<p>Grüße,<br />
Ethon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1991980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1991980</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Thu, 09 Dec 2010 15:18:35 GMT</pubDate></item><item><title><![CDATA[Reply to Templateklasse, Art specialization on Thu, 09 Dec 2010 16:04:22 GMT]]></title><description><![CDATA[<p>Ethon schrieb:</p>
<blockquote>
<p>Ich habe eine Templateklasse mit einer Vielzahl an Methoden.</p>
</blockquote>
<p>Was ist denn eine Templateklasse?<br />
Meinst Du ein Klassentemplate oder eine Instanz eines Klassentemplates?</p>
<p>Ethon schrieb:</p>
<blockquote>
<p>Eine Methode allerdings muss bei einigen Typen gänzlich anders implementiert werden.</p>
<p>Wie kann ich das Template spezialisieren, ohne die anderen Funktionen auch alle neu schreiben zu müssen?</p>
</blockquote>
<p>...ist bestimmt möglich... Verhalten lässt sich ja ganz gut mit Funktionsobjekten anpassen. Diese Elementfunktion leitet dann die Arbeit einfach weiter an ein Funktionsobjekt oder an die richtige freie Funktion per Overload-Resolution.</p>
<p>Beispiel (Deleter):</p>
<pre><code class="language-cpp">template&lt;class T&gt;
struct default_deleter {
  typedef T* pointer;
  void operator()(pointer p) const {
    delete p;
  }
};

template&lt;class T&gt;
struct default_deleter&lt;T[]&gt; {
  typedef T* poitner;
  void operator()(pointer p) const {
    delete[] p;
  }
};

template&lt;class T, class Deleter = default_deleter&lt;T&gt; &gt;
class unique_ptr
{
public:
  typedef typename D::pointer pointer;

  explicit unique_ptr(pointer p, Deleter d = Deleter())
  : p(p), d(d) {}

  ~unique_ptr()
  { deleter(p); }

  ...

private:
  pointer p;
  Deleter d;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1992027</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1992027</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 09 Dec 2010 16:04:22 GMT</pubDate></item><item><title><![CDATA[Reply to Templateklasse, Art specialization on Thu, 09 Dec 2010 16:05:33 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt;

template&lt;typename T&gt;
struct A {
  void foo() const { std::cout &lt;&lt; &quot;foo&quot; &lt;&lt; std::endl; }
};

// Wichtig: Das hier ggf. auch mit im Header
template&lt;&gt;
void A&lt;int&gt;::foo() const { std::cout &lt;&lt; &quot;bar&quot; &lt;&lt; std::endl; }

int main() {
  A&lt;double&gt; ad;
  A&lt;int&gt; ai;

  ad.foo();
  ai.foo();
}
</code></pre>
<p>Im Übrigen handelt es sich dabei um eine Klassentemplate bzw. Klassenvorlage, nicht um eine Templateklasse. Es ist eine Vorlage für Klassen, aber selbst keine Klasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1992031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1992031</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Thu, 09 Dec 2010 16:05:33 GMT</pubDate></item><item><title><![CDATA[Reply to Templateklasse, Art specialization on Fri, 10 Dec 2010 02:34:13 GMT]]></title><description><![CDATA[<p>Wobei das nur geht wenn man vollständig spezialisiert.</p>
<p>Funktionsobjekte wurden ja schon genannt.</p>
<p>Dann kann man noch Hilfs-Llassen-Templates mit statischen Memberfunktionen verwenden.<br />
Und natürlich kann man ein Klassen-Template von einem anderen ableiten, und beide unterschiedliche spezialisieren.<br />
In Verbindung mit dem <a href="http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern" rel="nofollow">CRTP</a> kann man damit auch oft gut arbeiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1992332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1992332</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 10 Dec 2010 02:34:13 GMT</pubDate></item></channel></rss>