<?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[[gnu++0x] Variadic Template based Array Class]]></title><description><![CDATA[<p>Hey Leute<br />
Ich versuche, eine Template basierte, multidimensionale Array Klasse zu programmieren<br />
Hier der Code :</p>
<pre><code class="language-cpp">typedef unsigned int uint;

template&lt;typename T, uint First , uint...Rest&gt;
struct A
{
    typedef A&lt;T,Rest...&gt;::Array Array[First] ; //cannot expand ‘Rest ...’ into a fixed-length argument list 

};

template&lt;typename T , uint First&gt;
struct A&lt;T,First&gt;
{
    typedef T Array[First] ;
};
</code></pre>
<p>Kennt jemand ein funktionierendes Workout ?</p>
<p>MFG<br />
Speed</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/259460/gnu-0x-variadic-template-based-array-class</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 20:25:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/259460.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 23 Jan 2010 12:29:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [gnu++0x] Variadic Template based Array Class on Sat, 23 Jan 2010 12:33:15 GMT]]></title><description><![CDATA[<p>Hey Leute<br />
Ich versuche, eine Template basierte, multidimensionale Array Klasse zu programmieren<br />
Hier der Code :</p>
<pre><code class="language-cpp">typedef unsigned int uint;

template&lt;typename T, uint First , uint...Rest&gt;
struct A
{
    typedef A&lt;T,Rest...&gt;::Array Array[First] ; //cannot expand ‘Rest ...’ into a fixed-length argument list 

};

template&lt;typename T , uint First&gt;
struct A&lt;T,First&gt;
{
    typedef T Array[First] ;
};
</code></pre>
<p>Kennt jemand ein funktionierendes Workout ?</p>
<p>MFG<br />
Speed</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1843659</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1843659</guid><dc:creator><![CDATA[Speed]]></dc:creator><pubDate>Sat, 23 Jan 2010 12:33:15 GMT</pubDate></item><item><title><![CDATA[Reply to [gnu++0x] Variadic Template based Array Class on Sat, 23 Jan 2010 12:39:18 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">typedef A&lt;T,Rest...&gt;::Array Array[First] ;
</code></pre>
<p>Hier fehlt das zweite Argument.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1843666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1843666</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 23 Jan 2010 12:39:18 GMT</pubDate></item><item><title><![CDATA[Reply to [gnu++0x] Variadic Template based Array Class on Sat, 23 Jan 2010 12:50:59 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<pre><code class="language-cpp">typedef A&lt;T,Rest...&gt;::Array Array[First] ;
</code></pre>
<p>Hier fehlt das zweite Argument.</p>
</blockquote>
<p>Das ist ja der Sinn dabei; dadurch entsteht ja eine Rekursion mit einer Abbruchbedingung.<br />
Folgendes funktionierendes Beispiel hat mich dazu Inspiriert :</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
void print_comma_separated_list(T value)
{
    std::cout&lt;&lt;value&lt;&lt;std::endl;
}

template&lt;typename First,typename ... Rest&gt;
void print_comma_separated_list(First first,Rest ... rest)
{
    std::cout&lt;&lt;first&lt;&lt;&quot;,&quot;;
    print_comma_separated_list(rest...);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1843676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1843676</guid><dc:creator><![CDATA[Speed]]></dc:creator><pubDate>Sat, 23 Jan 2010 12:50:59 GMT</pubDate></item><item><title><![CDATA[Reply to [gnu++0x] Variadic Template based Array Class on Sat, 23 Jan 2010 12:56:12 GMT]]></title><description><![CDATA[<p>Kann es grad nicht testen, da ich keinen geeigneten Kompiler zur Verfügung habe, aber meiner Meinung nach fehlt da ein <code>typename</code> :</p>
<pre><code class="language-cpp">typedef unsigned int uint; 

template&lt;typename T, uint First , uint...Rest&gt; 
struct A 
{ 
    typedef typename A&lt;T,Rest...&gt;::Array Array[First];
          //^^^^^^^^
}; 

template&lt;typename T , uint First&gt; 
struct A&lt;T,First&gt; 
{ 
    typedef T Array[First] ; 
};
</code></pre>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1843678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1843678</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 23 Jan 2010 12:56:12 GMT</pubDate></item><item><title><![CDATA[Reply to [gnu++0x] Variadic Template based Array Class on Sat, 23 Jan 2010 13:02:44 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Kann es grad nicht testen, da ich keinen geeigneten Kompiler zur Verfügung habe, aber meiner Meinung nach fehlt da ein <code>typename</code> :</p>
<pre><code class="language-cpp">typedef unsigned int uint; 

template&lt;typename T, uint First , uint...Rest&gt; 
struct A 
{ 
    typedef typename A&lt;T,Rest...&gt;::Array Array[First];
          //^^^^^^^^
}; 

template&lt;typename T , uint First&gt; 
struct A&lt;T,First&gt; 
{ 
    typedef T Array[First] ; 
};
</code></pre>
<p>Grüssli</p>
</blockquote>
<p>Tatsächlich fehlt da ein Typename; löst allerdings nicht das Problem für welches ich ein Workout suche :</p>
<pre><code class="language-cpp">template &lt;int a , int...b&gt;
struct A : A&lt;b...&gt; // unimplementiert
{};

template &lt;int a&gt;
struct A&lt;a&gt;{};

//komischerweise funktioniert diese endlosschleife :

template &lt;int a , int...b&gt;
struct A : A&lt;1,1,b...&gt;
{};

template &lt;int a&gt;
struct A&lt;a&gt;{};
</code></pre>
<p>Im Endeffekt suche ich ein konstrukt, dass das obige Simuliert.</p>
<p>MFG<br />
Speed</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1843680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1843680</guid><dc:creator><![CDATA[Speed]]></dc:creator><pubDate>Sat, 23 Jan 2010 13:02:44 GMT</pubDate></item><item><title><![CDATA[Reply to [gnu++0x] Variadic Template based Array Class on Sat, 23 Jan 2010 14:16:45 GMT]]></title><description><![CDATA[<p>Etwa so?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;typeinfo&gt;

template&lt;typename T, unsigned... dims &gt;
struct A; // &lt;-- das hier braucht der Compiler (noch).

template&lt;typename T, unsigned dim1, unsigned...dims&gt;
struct A&lt;T, dim1, dims...&gt;
{
  typedef typename A&lt;T, dims...&gt;::array array[dim1];
};

template&lt;typename T, unsigned dim1&gt;
struct A&lt;T, dim1&gt;
{
  typedef T array[dim1];
};

int main()
{
  A&lt;char, 1, 2, 3, 4, 5&gt;::array x;

  std::cout &lt;&lt; typeid(x).name() &lt;&lt; std::endl;
}
</code></pre>
<p>So schlängelt man sich an den noch nicht implementierten Teilen vorbei. Allerdings sollte dein ursprünglicher Code in der Zukunft auch irgendwann funktionieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1843724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1843724</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sat, 23 Jan 2010 14:16:45 GMT</pubDate></item><item><title><![CDATA[Reply to [gnu++0x] Variadic Template based Array Class on Sat, 23 Jan 2010 15:09:52 GMT]]></title><description><![CDATA[<p>Danke, es funktioniert!</p>
<p>MFG<br />
Speed</p>
<p>ps : welches Flag muss man setzten, damit GCC eine Warnung ausgibt, sobald die Array-grenzen überschritten werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1843749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1843749</guid><dc:creator><![CDATA[Speed]]></dc:creator><pubDate>Sat, 23 Jan 2010 15:09:52 GMT</pubDate></item><item><title><![CDATA[Reply to [gnu++0x] Variadic Template based Array Class on Sat, 23 Jan 2010 15:24:28 GMT]]></title><description><![CDATA[<p>Sofern die Indices nicht zur Compilezeit bekannt sind, kann der gcc selbst das nicht. Du kannst zu Debugzwecken -fmudflap -lmudflap mit angeben, aber in Release-Binaries würde ich das vermeiden (stumpf zu langsam). Ansonsten ist valgrind eine große Hilfe.</p>
<p>Oder du könntest schlicht std::vector benutzen und mit .at(i) darauf zugreifen - das schmeißt ggf. std::out_of_range.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1843755</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1843755</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sat, 23 Jan 2010 15:24:28 GMT</pubDate></item></channel></rss>