<?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[Templatespezialisierung und Vererbung]]></title><description><![CDATA[<pre><code class="language-cpp">template&lt;class T&gt;
struct foo
{
  //...
};

template&lt;&gt;
struct foo&lt;int&gt; : foo&lt;int&gt;
{
  //...
};
</code></pre>
<p>Erbt hier die Spezialisierung von der Basisklasse mit dem Templateparameter <code>int</code> oder von sich selbst (was ja nicht geht)?</p>
<p>MfG, EOutOfResources</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/285985/templatespezialisierung-und-vererbung</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 02:40:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/285985.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 01 May 2011 12:05:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Templatespezialisierung und Vererbung on Sun, 01 May 2011 12:05:44 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template&lt;class T&gt;
struct foo
{
  //...
};

template&lt;&gt;
struct foo&lt;int&gt; : foo&lt;int&gt;
{
  //...
};
</code></pre>
<p>Erbt hier die Spezialisierung von der Basisklasse mit dem Templateparameter <code>int</code> oder von sich selbst (was ja nicht geht)?</p>
<p>MfG, EOutOfResources</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2056766</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2056766</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sun, 01 May 2011 12:05:44 GMT</pubDate></item><item><title><![CDATA[Reply to Templatespezialisierung und Vererbung on Sun, 01 May 2011 13:15:45 GMT]]></title><description><![CDATA[<p>Wenn du <code>foo&lt;int&gt;</code> schreibst, ist damit immer die Spezialisierung gemeint. Auch hier.</p>
<p>Was du möchtest, lässt sich nur mit Copy-Paste erreichen. Was du solltest, ist eine explizite Spezialisierung von einzelnen Funktionen.</p>
<p>Eine eigene Klasse lohnt sich eigentlich nur, wenn man die Daten anders anordnen will.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2056776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2056776</guid><dc:creator><![CDATA[frauenarzt]]></dc:creator><pubDate>Sun, 01 May 2011 13:15:45 GMT</pubDate></item><item><title><![CDATA[Reply to Templatespezialisierung und Vererbung on Sun, 01 May 2011 14:52:44 GMT]]></title><description><![CDATA[<p>Das geht natürlich nicht und wie geschrieben wird hier die Spezialisierung referenziert, die zum Zeitpunkt der Vererbung noch nicht vollstaendig ist und dein Compiler somit hier ne Fehlermeldung ausspuckt. Aber das haettest du auch einfach selber rausfinden können indem du es compiliert haettest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2056813</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2056813</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 01 May 2011 14:52:44 GMT</pubDate></item><item><title><![CDATA[Reply to Templatespezialisierung und Vererbung on Sun, 01 May 2011 15:21:42 GMT]]></title><description><![CDATA[<p>Vielleicht ginge es ja, eine Klasse foo_base&lt;T&gt; zu machen und dann foo&lt;T&gt; : foo_base&lt;T&gt; ohne weitere Member und foo&lt;int&gt; : foo_base&lt;int&gt; mit extra-Membern</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2056824</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2056824</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Sun, 01 May 2011 15:21:42 GMT</pubDate></item><item><title><![CDATA[Reply to Templatespezialisierung und Vererbung on Sun, 01 May 2011 15:51:16 GMT]]></title><description><![CDATA[<p>wxSkip schrieb:</p>
<blockquote>
<p>Vielleicht ginge es ja, eine Klasse foo_base&lt;T&gt; zu machen und dann foo&lt;T&gt; : foo_base&lt;T&gt; ohne weitere Member und foo&lt;int&gt; : foo_base&lt;int&gt; mit extra-Membern</p>
</blockquote>
<p>Beizeiten hilft auch ein einfaches typedef weiter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2056833</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2056833</guid><dc:creator><![CDATA[typedef wxSkip inchoate;]]></dc:creator><pubDate>Sun, 01 May 2011 15:51:16 GMT</pubDate></item><item><title><![CDATA[Reply to Templatespezialisierung und Vererbung on Sun, 01 May 2011 16:03:10 GMT]]></title><description><![CDATA[<p>typedef wxSkip inchoate; schrieb:</p>
<blockquote>
<p>wxSkip schrieb:</p>
<blockquote>
<p>Vielleicht ginge es ja, eine Klasse foo_base&lt;T&gt; zu machen und dann foo&lt;T&gt; : foo_base&lt;T&gt; ohne weitere Member und foo&lt;int&gt; : foo_base&lt;int&gt; mit extra-Membern</p>
</blockquote>
<p>Beizeiten hilft auch ein einfaches typedef weiter.</p>
</blockquote>
<p>Meinst du so was?</p>
<pre><code class="language-cpp">template&lt;typename T&gt; class foo{};

typedef foo&lt;int&gt; FooIntBasic;

template&lt;&gt; class foo&lt;int&gt; : public FooIntBasic{...};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2056835</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2056835</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Sun, 01 May 2011 16:03:10 GMT</pubDate></item><item><title><![CDATA[Reply to Templatespezialisierung und Vererbung on Sun, 01 May 2011 18:46:54 GMT]]></title><description><![CDATA[<p>Das dürfte genauso verkehrt sein wie die ursprüngliche Lösung - auch wenn du der Klasse einen anderen Namen gibst, erst dein foo&lt;int&gt; immer noch von sich selber.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/25179">@EOutOfResources</a>: Was hast du mit dem Konstrukt eigentlich vor? Und wie stark unterscheidet sich dein foo&lt;int&gt; von jedem anderen foo&lt;T&gt;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2056881</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2056881</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sun, 01 May 2011 18:46:54 GMT</pubDate></item><item><title><![CDATA[Reply to Templatespezialisierung und Vererbung on Sun, 01 May 2011 19:08:04 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Das dürfte genauso verkehrt sein wie die ursprüngliche Lösung - auch wenn du der Klasse einen anderen Namen gibst, erst dein foo&lt;int&gt; immer noch von sich selber.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/25179">@EOutOfResources</a>: Was hast du mit dem Konstrukt eigentlich vor? Und wie stark unterscheidet sich dein foo&lt;int&gt; von jedem anderen foo&lt;T&gt;?</p>
</blockquote>
<p>Das Paradebeispiel wäre hier ja AFAIK std::vector&lt;bool&gt; mit inverse oder so etwas ähnlichem...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2056894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2056894</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Sun, 01 May 2011 19:08:04 GMT</pubDate></item><item><title><![CDATA[Reply to Templatespezialisierung und Vererbung on Sun, 01 May 2011 19:32:19 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/25179">@EOutOfResources</a>: Was hast du mit dem Konstrukt eigentlich vor? Und wie stark unterscheidet sich dein foo&lt;int&gt; von jedem anderen foo&lt;T&gt;?</p>
</blockquote>
<p><code>foo&lt;int&gt;</code> sollte lediglich ein paar zusätzliche Funktionen anbieten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2056902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2056902</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sun, 01 May 2011 19:32:19 GMT</pubDate></item><item><title><![CDATA[Reply to Templatespezialisierung und Vererbung on Sun, 01 May 2011 19:41:00 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/23670">@wxSkip</a>:<br />
vector&lt;bool&gt; hat afaik auch alle anderen vector&lt;&gt;-Methoden auch neudefiniert, um die kompaktere Speicherungsform umzusetzen - Methoden wie flip() sind da nur eine Zugabe.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/25179">@EOutOfResources</a>:<br />
Wenn du nichts grundlegendes an der Klassenstruktur ändern willst, kannst du auch eine normale Klasse von foo&lt;int&gt; ableiten, die die zusätzlichen Methoden anbietet. Andernfalls solltest du die gemeinsamen Daten in eine gemeinsame (Template-)Basisklasse zusammenfassen, wie es wxSkip vorgeschlagen hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2056908</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2056908</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sun, 01 May 2011 19:41:00 GMT</pubDate></item><item><title><![CDATA[Reply to Templatespezialisierung und Vererbung on Mon, 02 May 2011 00:59:28 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/25179">@EOutOfResources</a>: Was hast du mit dem Konstrukt eigentlich vor? Und wie stark unterscheidet sich dein foo&lt;int&gt; von jedem anderen foo&lt;T&gt;?</p>
</blockquote>
<p><code>foo&lt;int&gt;</code> sollte lediglich ein paar zusätzliche Funktionen anbieten.</p>
</blockquote>
<p>Kannst du diese zusätzlichen Funktionen nicht auch als freie Funktionen anbieten? Allenfalls kannst du sie auch als <code>friend</code> deklarieren.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2056946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2056946</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 02 May 2011 00:59:28 GMT</pubDate></item><item><title><![CDATA[Reply to Templatespezialisierung und Vererbung on Mon, 02 May 2011 10:31:17 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Kannst du diese zusätzlichen Funktionen nicht auch als freie Funktionen anbieten?</p>
</blockquote>
<p>So habe ich es auch implementiert gehabt, aber das Interface gefiel mir nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2057088</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057088</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Mon, 02 May 2011 10:31:17 GMT</pubDate></item><item><title><![CDATA[Reply to Templatespezialisierung und Vererbung on Mon, 02 May 2011 11:18:38 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<p>So habe ich es auch implementiert gehabt, aber das Interface gefiel mir nicht.</p>
</blockquote>
<p>freie Funktionen gehören genauso zum Interface einer Klasse. Und wenn für die Funktion nur das öffentliche Interface notwendig ist, dann sollte die Funktion auch nicht in die Klasse. Die geringst mögliche Bindung an eine Klasse.<br />
Wir sind hier ja nicht bei Java, wo ALLES in eine Klasse gepackt werden muss, selbst die main(). Durch freie Funktionen programmierst du kein schlechteres C++ - eher besseres.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2057101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057101</guid><dc:creator><![CDATA[Paranominalkritizist]]></dc:creator><pubDate>Mon, 02 May 2011 11:18:38 GMT</pubDate></item><item><title><![CDATA[Reply to Templatespezialisierung und Vererbung on Tue, 03 May 2011 15:47:49 GMT]]></title><description><![CDATA[<p>Paranominalkritizist schrieb:</p>
<blockquote>
<p>freie Funktionen gehören genauso zum Interface einer Klasse. Und wenn für die Funktion nur das öffentliche Interface notwendig ist, dann sollte die Funktion auch nicht in die Klasse. Die geringst mögliche Bindung an eine Klasse.<br />
Wir sind hier ja nicht bei Java, wo ALLES in eine Klasse gepackt werden muss, selbst die main(). Durch freie Funktionen programmierst du kein schlechteres C++ - eher besseres.</p>
</blockquote>
<p>Sehr gut zusammengefasst! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>Artikel von Scott Meyers zum Thema: <a href="http://drdobbs.com/cpp/184401197" rel="nofollow">http://drdobbs.com/cpp/184401197</a></p>
<p>Die Meinung, dass freie Funktionen &quot;weniger objektorientiert&quot;, &quot;schlechteres C++&quot; oder sonst irgendwie prinzipiell minderwertig sind, ist eines der übelsten C++-Irrtümer. Am schlimmsten finde ich Leute, welche in einer Bibliothek den Originalcode verändern, nur um <code>obj.Func()</code> statt <code>Func(obj)</code> schreiben zu können. Man könnte meinen, Syntax allein bestimme über die Qualität einer Schnittstelle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2057920</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057920</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 03 May 2011 15:47:49 GMT</pubDate></item></channel></rss>