<?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, Einschränkungen]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>kurze Frage, wenn ich Beispielsweise eine Template-Funktion betrachte:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
int foo(T x)
{
 ...
}
</code></pre>
<p>Gibt es dann eine Möglichkeit das T so einzuschränken, dass es z.B. nur für numerische Datentypen packt, d.h. so etwas soll möglich sein:</p>
<pre><code class="language-cpp">foo&lt;int&gt;(1)
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">foo&lt;float&gt;(1.5)
</code></pre>
<p>aber nicht</p>
<pre><code class="language-cpp">foo&lt;string&gt;(&quot;haha&quot;)
</code></pre>
<p>Habe nach so etwas wie &quot;isNumeric&quot; oder so gesucht leider ohne Erfolg. Hat da evtl jemand von euch eine Idee?</p>
<p>Gruß <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/topic/302316/templates-einschränkungen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 09:22:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/302316.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 16 Apr 2012 08:50:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Templates, Einschränkungen on Mon, 16 Apr 2012 08:50:35 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>kurze Frage, wenn ich Beispielsweise eine Template-Funktion betrachte:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
int foo(T x)
{
 ...
}
</code></pre>
<p>Gibt es dann eine Möglichkeit das T so einzuschränken, dass es z.B. nur für numerische Datentypen packt, d.h. so etwas soll möglich sein:</p>
<pre><code class="language-cpp">foo&lt;int&gt;(1)
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">foo&lt;float&gt;(1.5)
</code></pre>
<p>aber nicht</p>
<pre><code class="language-cpp">foo&lt;string&gt;(&quot;haha&quot;)
</code></pre>
<p>Habe nach so etwas wie &quot;isNumeric&quot; oder so gesucht leider ohne Erfolg. Hat da evtl jemand von euch eine Idee?</p>
<p>Gruß <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/2202415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2202415</guid><dc:creator><![CDATA[MatheStein]]></dc:creator><pubDate>Mon, 16 Apr 2012 08:50:35 GMT</pubDate></item><item><title><![CDATA[Reply to Templates, Einschränkungen on Mon, 16 Apr 2012 09:07:46 GMT]]></title><description><![CDATA[<p>Also, um eins musst Du dir keine Sorgen machen: Wenn Du für T etwas einsetzen willst, was nicht &quot;passt&quot;, dann bekommst Du den Fehler schon zur Compile-Zeit. Es wäre natürlich schön, wenn man solche Beschränkungen im Code ohne Template-Tricks aufschreiben könnte. Das ist aber noch nicht machbar. Das Feature, mit dem das mal möglich sein soll, heißt &quot;Concepts&quot;.</p>
<p>Aber, ein Beschränken (per Template-Tricks) hat natürlich noch den Vorteil, dass man damit die Überladungsmenge klein halten kann. Das Blöde ist, dass so ein Template-Instantiierungsfehler NACH der Überladungsauflösung kommen würde. Es kann also sein, dass nur ein Kandidat instantiiert werden kann, die Überladungsmauflösung aufgrund einer Mehrdeutigkeit aber nicht machbar ist. In solchen Fällen ist das Beschränken sinnvoll, auch wenn es zur Zeit noch relativ hässlich aussieht:</p>
<p>C++98 und Boost:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
typename boost::enable_if_c&lt;
  (boolscher Ausdruck mit T zum Aktivieren des Templates)
int&gt;::type foo(T x);
</code></pre>
<p>C++11:</p>
<pre><code class="language-cpp">#include &lt;type_traits&gt;

#define REQUIRES(...) ,class=typename std::enable_if&lt;(__VA_ARGS__)&gt;::type

template&lt;class T
  REQUIRES( std::is_arithmetic&lt;T&gt;::value )
&gt;
int foo(T x);
</code></pre>
<p>wobei der boolsche Ausdruck so etwas sein kann wie sizeof(T)&gt;8 oder irgend etwas mit den traits aus type_traits oder Boost.TypeTraits.</p>
<p>Den Rest kannst Du googeln:</p>
<ul>
<li>enable_if</li>
<li>type traits</li>
</ul>
]]></description><link>https://www.c-plusplus.net/forum/post/2202421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2202421</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 16 Apr 2012 09:07:46 GMT</pubDate></item><item><title><![CDATA[Reply to Templates, Einschränkungen on Mon, 16 Apr 2012 09:23:07 GMT]]></title><description><![CDATA[<blockquote>
<p>wenn ich Beispielsweise eine Template-Funktion betrachte:</p>
</blockquote>
<p>Warum haben Leute denn immer Templatefunktionen und Templateklassen?!? Habt ihr dann auch Dachautos?<br />
Also:<br />
* Eine Vorlage für eine Klasse -&gt; Klassentemplate<br />
* Eine Vorlage für eine Funktion -&gt; Funktionstemplate<br />
* Ein Dach für eine Auto -&gt; Autodach.<br />
Ergibt doch Sinn, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2202428</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2202428</guid><dc:creator><![CDATA[arghonaut]]></dc:creator><pubDate>Mon, 16 Apr 2012 09:23:07 GMT</pubDate></item><item><title><![CDATA[Reply to Templates, Einschränkungen on Mon, 16 Apr 2012 09:24:53 GMT]]></title><description><![CDATA[<p>Hast recht, merke ich mir ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2202429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2202429</guid><dc:creator><![CDATA[MatheStein]]></dc:creator><pubDate>Mon, 16 Apr 2012 09:24:53 GMT</pubDate></item></channel></rss>