<?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[bereichsprüfung mit templatemetaprogrammierung]]></title><description><![CDATA[<p>hi</p>
<p>alleine schon dass die stl-container zwei elementszugriffsoperatoren ([] und at) bereitstellen, zeigt doch dass die bereichsprüfung nicht ganz ohne ist. kann man die bereichsprüfung nicht mittels templatemetaprogrammierung machen? ich habe es mir etwa so vorgestellt:</p>
<pre><code>template&lt;std::size_t index, std::size_t range&gt;
class range_check
{
  range_check();
public:
  static bool in_range = index &lt; range;
};

template&lt;typename T&gt;
T&amp; container&lt;T&gt;::operator[] (std::size_t index)
{
  if(range_check&lt;index, this-&gt;lenght()&gt;
    throw out_of_range;
  return this-&gt;memory[index];
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/287636/bereichsprüfung-mit-templatemetaprogrammierung</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 11:17:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/287636.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 01 Jun 2011 08:24:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to bereichsprüfung mit templatemetaprogrammierung on Wed, 01 Jun 2011 08:24:37 GMT]]></title><description><![CDATA[<p>hi</p>
<p>alleine schon dass die stl-container zwei elementszugriffsoperatoren ([] und at) bereitstellen, zeigt doch dass die bereichsprüfung nicht ganz ohne ist. kann man die bereichsprüfung nicht mittels templatemetaprogrammierung machen? ich habe es mir etwa so vorgestellt:</p>
<pre><code>template&lt;std::size_t index, std::size_t range&gt;
class range_check
{
  range_check();
public:
  static bool in_range = index &lt; range;
};

template&lt;typename T&gt;
T&amp; container&lt;T&gt;::operator[] (std::size_t index)
{
  if(range_check&lt;index, this-&gt;lenght()&gt;
    throw out_of_range;
  return this-&gt;memory[index];
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2071869</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071869</guid><dc:creator><![CDATA[caesar_chiffre]]></dc:creator><pubDate>Wed, 01 Jun 2011 08:24:37 GMT</pubDate></item><item><title><![CDATA[Reply to bereichsprüfung mit templatemetaprogrammierung on Wed, 01 Jun 2011 08:30:22 GMT]]></title><description><![CDATA[<p>In Zeile 12 müsstest du noch <code>::in_range</code> anhängen. Und zudem: Was machst du, wenn die Parameter nicht zur Compilezeit bekannt sind?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071874</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071874</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Wed, 01 Jun 2011 08:30:22 GMT</pubDate></item><item><title><![CDATA[Reply to bereichsprüfung mit templatemetaprogrammierung on Wed, 01 Jun 2011 08:31:37 GMT]]></title><description><![CDATA[<p>caesar_chiffre schrieb:</p>
<blockquote>
<p>if(range_check&lt;index, this-&gt;lenght()&gt;</p>
</blockquote>
<p>Das läuft nicht, weil weder length() noch index Compilezeit-Konstanten sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071875</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071875</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 01 Jun 2011 08:31:37 GMT</pubDate></item><item><title><![CDATA[Reply to bereichsprüfung mit templatemetaprogrammierung on Wed, 01 Jun 2011 15:02:56 GMT]]></title><description><![CDATA[<p>Ja, im Allgemeinen sind die nicht zur Compilezeit bekannt.</p>
<p>Aber es gibt Fälle, wo das gehen könnte. Z.B. für Matrizen oder Vektoren, die eine zur Compilezeit bekannte Größe haben. Dazu noch Loop-Unroll und ab geht der Peter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2072064</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2072064</guid><dc:creator><![CDATA[bmario]]></dc:creator><pubDate>Wed, 01 Jun 2011 15:02:56 GMT</pubDate></item><item><title><![CDATA[Reply to bereichsprüfung mit templatemetaprogrammierung on Wed, 01 Jun 2011 15:56:54 GMT]]></title><description><![CDATA[<p>Der Index ist aber immer noch keine Compilezeitkonstante.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2072086</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2072086</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 01 Jun 2011 15:56:54 GMT</pubDate></item><item><title><![CDATA[Reply to bereichsprüfung mit templatemetaprogrammierung on Wed, 01 Jun 2011 18:00:50 GMT]]></title><description><![CDATA[<p>Wenn man aber z.B. den CopyCtor mit Loop Unroll implementiert, dann ist in diesem Bereich der Index eine Compilezeitkonstante, ich könnte das jetzt auch als Beispiel anfügen, aber a) hätte man durch das LoopUnroll einen impliziten Rangecheck und b) hast du natürlich recht, das abseits solcher Spezialfälle, der Index meist nicht zur Compilezeit bekannt ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2072145</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2072145</guid><dc:creator><![CDATA[bmario]]></dc:creator><pubDate>Wed, 01 Jun 2011 18:00:50 GMT</pubDate></item><item><title><![CDATA[Reply to bereichsprüfung mit templatemetaprogrammierung on Thu, 02 Jun 2011 14:43:56 GMT]]></title><description><![CDATA[<p>bmario schrieb:</p>
<blockquote>
<p>dann ist in diesem Bereich der Index eine Compilezeitkonstante</p>
</blockquote>
<p>Nein, es handelt sich im C++-Sinne immer noch nicht um einen <em>konstanten Ausdruck</em>. Deshalb kann man ihn auch nicht zur Kompilierzeit prüfen.</p>
<p>Ansonsten müsste man die Compilezeit-Konstante über den Aufruf hinweg bewahren, was nur mit Templates geht.</p>
<pre><code class="language-cpp">template &lt;typename T, unsigned int N&gt;
class Array
{
    public:
        template &lt;unsigned int I&gt;
        T&amp; Get();
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2072422</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2072422</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 02 Jun 2011 14:43:56 GMT</pubDate></item><item><title><![CDATA[Reply to bereichsprüfung mit templatemetaprogrammierung on Thu, 02 Jun 2011 14:55:12 GMT]]></title><description><![CDATA[<p>Am Besten zeigst du uns dein konkretes Beispiel, wo du soetwas jetzt grade anwenden möchtest. Sowas gibts nicht allzu häufig, und meistens wird mans wohl anderweitig lösen bzw. es erledigt sich schon selbst. Vielleicht gibts für deinen Anwendungsfall auch eine passende Bibliothek, die auch so einen rangecheck schon mit drin hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2072427</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2072427</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 02 Jun 2011 14:55:12 GMT</pubDate></item></channel></rss>