<?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[NUR Template-Spezialisierungen zulassen?]]></title><description><![CDATA[<p>Hallo,<br />
ist es möglich, bei einer Templateklasse NUR templatespezialisierungen zuzulassen? Beispiel:</p>
<pre><code class="language-cpp">template&lt;unsigned int N&gt;
class zahl
{
   //...
};
</code></pre>
<p>Der Parameter N darf aber nur eine Potenz von zwei sein. D.h, es soll nur Klassen geben, deren N = 2^x ist. Außerdem möchte ich nicht 32 verschiedene Spezialisierungen per Hand schreiben.</p>
<pre><code class="language-cpp">template&lt;&gt;
class zahl&lt; N == 2^x &gt;
{
   //...
};
</code></pre>
<p>Weis jemand, wie/ob so etwas möglich ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/256457/nur-template-spezialisierungen-zulassen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 08:06:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/256457.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 13 Dec 2009 02:28:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to NUR Template-Spezialisierungen zulassen? on Sun, 13 Dec 2009 02:28:32 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ist es möglich, bei einer Templateklasse NUR templatespezialisierungen zuzulassen? Beispiel:</p>
<pre><code class="language-cpp">template&lt;unsigned int N&gt;
class zahl
{
   //...
};
</code></pre>
<p>Der Parameter N darf aber nur eine Potenz von zwei sein. D.h, es soll nur Klassen geben, deren N = 2^x ist. Außerdem möchte ich nicht 32 verschiedene Spezialisierungen per Hand schreiben.</p>
<pre><code class="language-cpp">template&lt;&gt;
class zahl&lt; N == 2^x &gt;
{
   //...
};
</code></pre>
<p>Weis jemand, wie/ob so etwas möglich ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821844</guid><dc:creator><![CDATA[Hildorn]]></dc:creator><pubDate>Sun, 13 Dec 2009 02:28:32 GMT</pubDate></item><item><title><![CDATA[Reply to NUR Template-Spezialisierungen zulassen? on Sun, 13 Dec 2009 04:13:04 GMT]]></title><description><![CDATA[<p>Geht, ist aber etwas umständlich. Beispielsweise so:</p>
<pre><code class="language-cpp">struct empty { };

template&lt;bool&gt; struct assert_type       { };
template&lt;    &gt; struct assert_type&lt;true&gt; { typedef empty type; };

template&lt;unsigned x&gt; struct bitcounter {
  static unsigned const val = (x &amp; 1) + bitcounter&lt;(x &gt;&gt; 1)&gt;::val;
};

template&lt;&gt; struct bitcounter&lt;0&gt; {
  static unsigned const val = 0;
};

template&lt;unsigned x&gt; struct is_pow2 {
  typedef typename assert_type&lt;bitcounter&lt;x&gt;::val == 1&gt;::type type;
};

template&lt;unsigned x&gt; struct can_only_use_pow2 
  : private is_pow2&lt;x&gt;::type 
{ };
</code></pre>
<p>Wenn can_only_use_pow2 mit etwas anderem als einer Potenz von 2 konkretisiert wird, hat assert_type&lt;bitcounter&lt;x&gt;::val == 1&gt; keinen Member type, und die private Ableitung schlägt fehl.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821857</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821857</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sun, 13 Dec 2009 04:13:04 GMT</pubDate></item><item><title><![CDATA[Reply to NUR Template-Spezialisierungen zulassen? on Sun, 13 Dec 2009 15:25:59 GMT]]></title><description><![CDATA[<p>Etwas einfacher:</p>
<pre><code class="language-cpp">template &lt;unsigned int N&gt;
struct is_power_of_two
{
	static const bool value = (N%2 == 0) &amp;&amp; is_power_of_two&lt;N/2&gt;::value;
};

template &lt;&gt;
struct is_power_of_two&lt;1&gt;
{
	static const bool value = true;
};

template &lt;&gt;
struct is_power_of_two&lt;0&gt;
{
	static const bool value = false;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1821987</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821987</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 13 Dec 2009 15:25:59 GMT</pubDate></item><item><title><![CDATA[Reply to NUR Template-Spezialisierungen zulassen? on Sun, 13 Dec 2009 15:33:49 GMT]]></title><description><![CDATA[<p><em>Darum</em> liebe ich C++ :xmas1:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1821990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1821990</guid><dc:creator><![CDATA[*rant*]]></dc:creator><pubDate>Sun, 13 Dec 2009 15:33:49 GMT</pubDate></item><item><title><![CDATA[Reply to NUR Template-Spezialisierungen zulassen? on Sun, 13 Dec 2009 16:31:38 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template &lt;unsigned int N&gt;
struct is_power_of_two
{
	static const bool value = N != 0 &amp;&amp; ( N &amp; N - 1 ) == 0;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1822016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1822016</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 13 Dec 2009 16:31:38 GMT</pubDate></item><item><title><![CDATA[Reply to NUR Template-Spezialisierungen zulassen? on Sun, 13 Dec 2009 16:35:26 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template &lt;unsigned int N&gt;
struct is_power_of_two
{
	static const bool value = N != 0 &amp;&amp; ( N &amp; N - 1 ) == 0;
};
</code></pre>
</blockquote>
<p>Eher <strong>darum</strong>. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
Nicht schlecht, camper! <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1822018</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1822018</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 13 Dec 2009 16:35:26 GMT</pubDate></item></channel></rss>