<?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[Templates von templates]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>Ich brauche einen kurzen Denkanstoss für folgende Problematik. Meine Klassenhierarchie sah zu Beginn so aus:</p>
<pre><code class="language-cpp">template &lt;class T&gt;
class A1
{
// Typ T wird hier genutzt;
};

template &lt;class T&gt;
class B: public A1&lt;T&gt;
{
// Typ T wird auch hier verwendet.
};
</code></pre>
<p>Da die Klasse B von verschiedenen Klassen per template erben sollte, habe ich die folgende Umstellung gemacht:</p>
<pre><code class="language-cpp">template &lt;class U, class T&gt;
class B: public U
{
// Typ T wird auch hier verwendet.
};

typedef irgendwas T; 
typedef B&lt;A1&lt;T&gt;, T&gt;
typedef B&lt;A2&lt;T&gt;, T&gt;
</code></pre>
<p>Der template Parameter T ist dabei aber redundant. Gibt es eine Möglichkeit irgendwie das folgendes zu machen, sodass das typedef &quot;funktioniert&quot; und der Typ<br />
T sowohl für A1 als auch B verwendet wird. Hab schon folgendes ausprobiert hab da aber zu wenig Erfahrung mit.</p>
<pre><code class="language-cpp">template &lt;class U, class T&gt;
class B: public U&lt;T&gt;
{
// Typ T wird auch hier verwendet.
};

typedef B&lt;A1, T&gt; B1;
typedef B&lt;A2, T&gt; B2;
</code></pre>
<p>Danke schön!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/247257/templates-von-templates</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 15:57:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/247257.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 08 Aug 2009 13:02:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Templates von templates on Sat, 08 Aug 2009 13:02:26 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>Ich brauche einen kurzen Denkanstoss für folgende Problematik. Meine Klassenhierarchie sah zu Beginn so aus:</p>
<pre><code class="language-cpp">template &lt;class T&gt;
class A1
{
// Typ T wird hier genutzt;
};

template &lt;class T&gt;
class B: public A1&lt;T&gt;
{
// Typ T wird auch hier verwendet.
};
</code></pre>
<p>Da die Klasse B von verschiedenen Klassen per template erben sollte, habe ich die folgende Umstellung gemacht:</p>
<pre><code class="language-cpp">template &lt;class U, class T&gt;
class B: public U
{
// Typ T wird auch hier verwendet.
};

typedef irgendwas T; 
typedef B&lt;A1&lt;T&gt;, T&gt;
typedef B&lt;A2&lt;T&gt;, T&gt;
</code></pre>
<p>Der template Parameter T ist dabei aber redundant. Gibt es eine Möglichkeit irgendwie das folgendes zu machen, sodass das typedef &quot;funktioniert&quot; und der Typ<br />
T sowohl für A1 als auch B verwendet wird. Hab schon folgendes ausprobiert hab da aber zu wenig Erfahrung mit.</p>
<pre><code class="language-cpp">template &lt;class U, class T&gt;
class B: public U&lt;T&gt;
{
// Typ T wird auch hier verwendet.
};

typedef B&lt;A1, T&gt; B1;
typedef B&lt;A2, T&gt; B2;
</code></pre>
<p>Danke schön!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1757369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1757369</guid><dc:creator><![CDATA[megaweber]]></dc:creator><pubDate>Sat, 08 Aug 2009 13:02:26 GMT</pubDate></item><item><title><![CDATA[Reply to Templates von templates on Sat, 08 Aug 2009 13:22:09 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template &lt;template&lt;typename&gt; class U, class T&gt;
class B: public U&lt;T&gt;
{
// Typ T wird auch hier verwendet.
};

typedef B&lt;A1, T&gt; B1;
typedef B&lt;A2, T&gt; B2;
</code></pre>
<p>Dann muss U aber <strong>genau einen</strong> Templateparameter akzeptieren und darf keine weiteren Parameter, auch nicht mit Defaultwerten, haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1757382</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1757382</guid><dc:creator><![CDATA[YASC]]></dc:creator><pubDate>Sat, 08 Aug 2009 13:22:09 GMT</pubDate></item><item><title><![CDATA[Reply to Templates von templates on Sat, 08 Aug 2009 14:02:32 GMT]]></title><description><![CDATA[<p>Danke, klappt wunderbar.</p>
<p>Ich hatte dieses Problem an zwei Stellen, an einer ists nun gelöst, bei der anderen hat jedoch die Klasse U zwei template Parameter. Ich hab jedoch schon Ideen wie ich die Klassenhierarchie weiter (sinnvoll) anpassen kann, sodass das auch so gehen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1757404</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1757404</guid><dc:creator><![CDATA[megaweber]]></dc:creator><pubDate>Sat, 08 Aug 2009 14:02:32 GMT</pubDate></item><item><title><![CDATA[Reply to Templates von templates on Sat, 08 Aug 2009 14:08:23 GMT]]></title><description><![CDATA[<p>In den meisten Fällen ist es hier sinnvoller, mit Interface-typedefs zu arbieten.</p>
<pre><code class="language-cpp">template &lt;class T&gt;
class A1
{
   typedef T value_type;
...
};

template &lt;class A&gt;
class B: public A
{
   typedef typename A::value_type T;
...
};
</code></pre>
<p>Das ist weniger restriktiv und verringert die Koppelung zwischen den Klassen. Es ist kein Zufall, dass genau das auch in praktisch allen Templates der Standardbiliothek gemacht wird.<br />
Natürlich gibt es auch Fälle, in den Templatetemplateparameter angebracht sind, z.B. wenn das Template noch mit anderen Parametern instantiiert werden soll. Aber sogar dann gibt es ggf. noch Alternativen, man denke etwa an allocator::rebind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1757405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1757405</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 08 Aug 2009 14:08:23 GMT</pubDate></item></channel></rss>