<?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 für eine bestimmte template Klasse als Argument ...]]></title><description><![CDATA[<p>Hallo ... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
<pre><code class="language-cpp">template&lt;const unsigned N, typename T&gt;
class array
{
//sth. cool here
};

template&lt;typename T&gt; class test
{
};

/* Spezialisierung für template&lt;typename T&gt; class test wenn 
 * template&lt;const unsigned N, typename T&gt; class array und ALLE ALLE ALLE
 * Ableitungen davon als Argument anagegeben
 */

template&lt;&gt;
class test&lt; template&lt;const unsigned N, typename T&gt; class array &gt;
{
};
</code></pre>
<p>Leider Gottes sieht gcc das bisschen anders:</p>
<blockquote>
<p>Fehler: Templateargument 1 ist ungültig<br />
expected unqualified-id before »&gt;« token<br />
Fehler: »array« ist kein Template-Typ<br />
...<br />
...<br />
...<br />
...</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/topic/215759/template-spezialisierung-für-eine-bestimmte-template-klasse-als-argument</link><generator>RSS for Node</generator><lastBuildDate>Mon, 12 Oct 2026 00:19:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/215759.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 15 Jun 2008 08:36:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template Spezialisierung für eine bestimmte template Klasse als Argument ... on Sun, 15 Jun 2008 08:47:24 GMT]]></title><description><![CDATA[<p>Hallo ... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
<pre><code class="language-cpp">template&lt;const unsigned N, typename T&gt;
class array
{
//sth. cool here
};

template&lt;typename T&gt; class test
{
};

/* Spezialisierung für template&lt;typename T&gt; class test wenn 
 * template&lt;const unsigned N, typename T&gt; class array und ALLE ALLE ALLE
 * Ableitungen davon als Argument anagegeben
 */

template&lt;&gt;
class test&lt; template&lt;const unsigned N, typename T&gt; class array &gt;
{
};
</code></pre>
<p>Leider Gottes sieht gcc das bisschen anders:</p>
<blockquote>
<p>Fehler: Templateargument 1 ist ungültig<br />
expected unqualified-id before »&gt;« token<br />
Fehler: »array« ist kein Template-Typ<br />
...<br />
...<br />
...<br />
...</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1529354</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1529354</guid><dc:creator><![CDATA[Pigeon]]></dc:creator><pubDate>Sun, 15 Jun 2008 08:47:24 GMT</pubDate></item><item><title><![CDATA[Reply to Template Spezialisierung für eine bestimmte template Klasse als Argument ... on Sun, 15 Jun 2008 08:54:28 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template&lt;const unsigned N, typename T&gt;
class array
{
//sth. cool here
};

class arrayDeri : public array&lt;3,float&gt;
{
};

template&lt;typename T&gt;
struct test
{
    test() {
        cout &lt;&lt; &quot;Ich habe &quot; &lt;&lt; typeid(T).name() &lt;&lt; &quot; als Argument!&quot; &lt;&lt; endl;
    }
};

template&lt;&gt;
template&lt;const unsigned N, typename T&gt;
struct test&lt; class array&lt;N,T&gt; &gt;
{
    test() {
        cout &lt;&lt; &quot;Ich habe array&lt;&quot; &lt;&lt; N &lt;&lt; &quot;,&quot; &lt;&lt; typeid(T).name() &lt;&lt; &quot;&gt; als Argument!&quot; &lt;&lt; endl;
    }
};

int main()
{
    test&lt;float&gt; t1;
    test&lt; array&lt;3,float&gt; &gt; t2;
    test&lt; arrayDeri &gt; t3;
</code></pre>
<p>So ist es richtig!</p>
<blockquote>
<p>Ich habe f als Argument!<br />
Ich habe array&lt;3,f&gt; als Argument!<br />
Ich habe 9arrayDeri als Argument!</p>
</blockquote>
<p>Jedoch landet arrayDeri wohl nicht in der Spezialisierung!! Was tun? :schland: <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1529360</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1529360</guid><dc:creator><![CDATA[Pigeon]]></dc:creator><pubDate>Sun, 15 Jun 2008 08:54:28 GMT</pubDate></item><item><title><![CDATA[Reply to Template Spezialisierung für eine bestimmte template Klasse als Argument ... on Sun, 15 Jun 2008 11:10:30 GMT]]></title><description><![CDATA[<p>Das geht nicht. Eine Ableitung als Argument wird niemals die Spezialisierung der Basisklasse Instazieren!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1529410</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1529410</guid><dc:creator><![CDATA[KlUgScHeIsSeR]]></dc:creator><pubDate>Sun, 15 Jun 2008 11:10:30 GMT</pubDate></item><item><title><![CDATA[Reply to Template Spezialisierung für eine bestimmte template Klasse als Argument ... on Sun, 15 Jun 2008 11:17:42 GMT]]></title><description><![CDATA[<p>KlUgScHeIsSeR schrieb:</p>
<blockquote>
<p>Das geht nicht. Eine Ableitung als Argument wird niemals die Spezialisierung der Basisklasse Instazieren!</p>
</blockquote>
<p>Ja du Klugscheisser <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> Hab ich gemerkt. Jedoch muss es doch alternativen geben <strong>ohne</strong> einen neuen Klassentyp zu erstellen ...!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1529416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1529416</guid><dc:creator><![CDATA[Pigeon]]></dc:creator><pubDate>Sun, 15 Jun 2008 11:17:42 GMT</pubDate></item><item><title><![CDATA[Reply to Template Spezialisierung für eine bestimmte template Klasse als Argument ... on Sun, 15 Jun 2008 11:24:30 GMT]]></title><description><![CDATA[<p>Pigeon schrieb:</p>
<blockquote>
<p>KlUgScHeIsSeR schrieb:</p>
<blockquote>
<p>Das geht nicht. Eine Ableitung als Argument wird niemals die Spezialisierung der Basisklasse Instazieren!</p>
</blockquote>
<p>Ja du Klugscheisser <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> Hab ich gemerkt. Jedoch muss es doch alternativen geben <strong>ohne</strong> einen neuen Klassentyp zu erstellen ...!?</p>
</blockquote>
<p>Es gibt Alternativen, allerdings keine, die exakt das machen, was du andeutest.</p>
<pre><code class="language-cpp">class foo : public array&lt;10,int&gt;, public array&lt;100,float&gt; { ... };

test&lt;foo&gt; // welche N und T soll hier deduziert werden?
</code></pre>
<p>Man kann zwar ermitteln, ob eine gegebene Klasse von einer anderen abgeleitet ist, aber es existiert kein Mechanismus, um für eine gegebene Klasse alle Basisklassen systematisch aufzuzählen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1529420</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1529420</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 15 Jun 2008 11:24:30 GMT</pubDate></item><item><title><![CDATA[Reply to Template Spezialisierung für eine bestimmte template Klasse als Argument ... on Sun, 15 Jun 2008 11:24:47 GMT]]></title><description><![CDATA[<p>Den Fall habe ich nicht bedacht (da das mehrfache erben eigendlich nicht vorgesehen ist ...). Was wären denn die besagten Alternativen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1529422</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1529422</guid><dc:creator><![CDATA[Pigeon]]></dc:creator><pubDate>Sun, 15 Jun 2008 11:24:47 GMT</pubDate></item><item><title><![CDATA[Reply to Template Spezialisierung für eine bestimmte template Klasse als Argument ... on Sun, 15 Jun 2008 11:44:53 GMT]]></title><description><![CDATA[<p>Also meine template-Klasse die array als Argument nehmen soll ist nicht für Typen die mehrfach von array geerbt haben zu gebrauchen. Also sind die neuen Bedingungen, dass der Typ <strong>1x</strong> von array geerbt hat. Ansonsten ist es ein Fall für das allgemeine template&lt;typename T&gt; class test</p>
<p>Aber ich fürchte schon sowas ist auch nicht zu machen, ne? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1529429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1529429</guid><dc:creator><![CDATA[Pigeon]]></dc:creator><pubDate>Sun, 15 Jun 2008 11:44:53 GMT</pubDate></item><item><title><![CDATA[Reply to Template Spezialisierung für eine bestimmte template Klasse als Argument ... on Sun, 15 Jun 2008 11:59:28 GMT]]></title><description><![CDATA[<p>Mit einer einfachen Spezialisierung von test kommen wir nicht weiter. Was wir hier brauchen, ist eine Templatemetafunktion, die durch ein geeignetes Prädikat eine Spezialisierung des richtigen Templates auswählt.</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
struct test; // Template für den Fall, dass T nicht von array&lt;..&gt; abgeleitet ist, ohne direkt darauf Bezug zu nehmen (static_asserts innerhalb der Klasse sind natürlich möglich
template&lt;typename T&gt;
struct test_of_array; // ditto, für Ableitung von array&lt;..&gt;

template&lt;typename T&gt;
struct test_of
{
    typedef typename if_&lt; magical_predicate&lt;T&gt;, test&lt;T&gt;, test_of_array&lt;T&gt; &gt;::type type;
};
</code></pre>
<p>Das Problem ist jetzt, wie magical_predicate zu schreiben ist. Einfach für entsprechende T zu spezialisieren würde wieder zum ursprünglichen Problem führen.<br />
Eine Möglichkeit wäre, eine hinreichend umfängliche aber beschränkte Menge von array-Spezialisierungen so zu durchsuchen, dass ein Exemplar gefunden werden kann, dass Basisklasse ist. Angemessenen Compilerungszeiten dürfte das allerdings nicht zuträglich sein. Eleganter wäre evtl. Alle array-Spezialisierungen von einer speziellen Klasse, die nur für diesen Zweck existiert, ableiten zu lassen. In diesem Fall wäre unser T genau dann von einer array-Spezialisierung abgeleitet, wenn es von diesem Tag abgeleitet ist.</p>
<pre><code class="language-cpp">struct array_tag {};
template&lt;unsigned N, typename T&gt;
class array : public array_tag
{
public:
    static const unsigned size = N;
    typedef T value_type;
//sth. cool here
};
template&lt;unsigned N, typename T&gt;
const unsigned array&lt;N,T&gt;::size;

template&lt;typename T, bool = boost::is_base_of&lt;array_tag,T&gt;::value&gt;
struct test
{
    test() {
        cout &lt;&lt; &quot;Ich habe &quot; &lt;&lt; typeid(T).name() &lt;&lt; &quot; als Argument!&quot; &lt;&lt; endl;
    }
};

template&lt;typename T&gt;
struct test&lt;T,true&gt;
{
    test() {
        cout &lt;&lt; &quot;Ich habe array&lt;&quot; &lt;&lt; T::size &lt;&lt; &quot;,&quot; &lt;&lt; typeid(typename T::value_type).name() &lt;&lt; &quot;&gt; als Argument!&quot; &lt;&lt; endl;
    }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1529436</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1529436</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 15 Jun 2008 11:59:28 GMT</pubDate></item><item><title><![CDATA[Reply to Template Spezialisierung für eine bestimmte template Klasse als Argument ... on Sun, 15 Jun 2008 14:31:11 GMT]]></title><description><![CDATA[<p>OH MEIN GOTT! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
Vielen herzlichen Dank!!! Das ist schlichtweg perfekt!!! Und Klassen die mehrmals von array erben kompilieren schlichtweg nicht!!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
<p>U made my day <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1529522</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1529522</guid><dc:creator><![CDATA[Pigeon]]></dc:creator><pubDate>Sun, 15 Jun 2008 14:31:11 GMT</pubDate></item><item><title><![CDATA[Reply to Template Spezialisierung für eine bestimmte template Klasse als Argument ... on Sun, 15 Jun 2008 19:35:08 GMT]]></title><description><![CDATA[<p>Coole Sache! Das kann ich auch gebrauchen!<br />
Geht das auch mit mehreren Typen? Also ne Spezialisierung für andere Klassen und deren Ableitungen. So wie ich das sehe gibts nur 2 Möglichkeiten wegen dem <strong>bool</strong></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1529686</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1529686</guid><dc:creator><![CDATA[-.]]></dc:creator><pubDate>Sun, 15 Jun 2008 19:35:08 GMT</pubDate></item></channel></rss>