<?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&amp;lt;double X&amp;gt;]]></title><description><![CDATA[<p>Hallo,</p>
<p>kann mir jemand sagen, warum</p>
<pre><code class="language-cpp">template&lt;int X&gt;
class Blah
{
...
};
</code></pre>
<p>funktioniert und</p>
<pre><code class="language-cpp">template&lt;double X&gt;
class Blah
{
...
}
</code></pre>
<p>den Compiler-Fehler &quot;'double' is not a valid type for template constant parameter&quot; liefert?</p>
<p>Was ich eigentlich versuche zu machen, ist ein Limited/Ranged Datentyp, z.B. sowas wie Latitude_T der nur double Werte von -90.0 bis 90.0 annehmen kann und ansonsten eine Excpetion wirft.</p>
<p>Gruß, Hanebuchen</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/189065/template-lt-double-x-gt</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 07:10:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/189065.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 08 Aug 2007 08:25:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to template&amp;lt;double X&amp;gt; on Wed, 08 Aug 2007 08:25:10 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>kann mir jemand sagen, warum</p>
<pre><code class="language-cpp">template&lt;int X&gt;
class Blah
{
...
};
</code></pre>
<p>funktioniert und</p>
<pre><code class="language-cpp">template&lt;double X&gt;
class Blah
{
...
}
</code></pre>
<p>den Compiler-Fehler &quot;'double' is not a valid type for template constant parameter&quot; liefert?</p>
<p>Was ich eigentlich versuche zu machen, ist ein Limited/Ranged Datentyp, z.B. sowas wie Latitude_T der nur double Werte von -90.0 bis 90.0 annehmen kann und ansonsten eine Excpetion wirft.</p>
<p>Gruß, Hanebuchen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1340571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340571</guid><dc:creator><![CDATA[hanebuechen]]></dc:creator><pubDate>Wed, 08 Aug 2007 08:25:10 GMT</pubDate></item><item><title><![CDATA[Reply to template&amp;lt;double X&amp;gt; on Wed, 08 Aug 2007 08:46:33 GMT]]></title><description><![CDATA[<p>Dafür brauchst Du doch keine Templates, sondern eine Klasse, die einen double-Variable hält und entsprechende operatoren überlädt.<br />
Bei den operatoren += etc. musst Du dann überprüfen, ob der Wert innerhalb der Range liegt. Falls dies nicht der Fall ist, dann schmeißt Du halt ne exception.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1340586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340586</guid><dc:creator><![CDATA[Airdamn]]></dc:creator><pubDate>Wed, 08 Aug 2007 08:46:33 GMT</pubDate></item><item><title><![CDATA[Reply to template&amp;lt;double X&amp;gt; on Wed, 08 Aug 2007 09:02:50 GMT]]></title><description><![CDATA[<p>Wie Du selbst schon schreibst:</p>
<p>hanebuechen schrieb:</p>
<blockquote>
<p>...&quot;'double' is not a valid type for template constant parameter&quot;...</p>
</blockquote>
<p>Der Standard erlaubt einfach kein double als &quot;Konstantenparameter&quot;.<br />
Ich glaube, Du hast auch den &quot;Konstantenparameter&quot; von templates missverstanden.</p>
<p>Wie wär's mit:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class ranged {
   T value, maxValue, T minValue;
   void checkRange(T val) { if(val &gt; maxValue || val &lt; minValue) throw out_of_range(); }
public:
   ranged(T initVal, T maxVal, T minVal) : 
      maxValue(maxVal),
      minValue(minVal) { set(init); }
   void set(T val) { checkRange(initVal); value = initVal; }
};

int main() {
   ranged&lt;int&gt; i(0, -2, 30);
   i.set(7);
   i.set(34);
   ...
}
</code></pre>
<p>Da kannst Du dann noch alle möglichen Operatoren überladen (+, -, *, ....)</p>
<p>Airdamn schrieb:</p>
<blockquote>
<p>Dafür brauchst Du doch keine Templates, ...</p>
</blockquote>
<p>Naja, wenn man int, long, double, float, complex, ... braucht, ist ein template vielleicht doch ganz nett. <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 />
Aber Du hast schon Recht: Die eigentliche Aufgabe wird nicht durch die &quot;Templatisierung&quot; gemacht.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1340588</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340588</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 08 Aug 2007 09:02:50 GMT</pubDate></item><item><title><![CDATA[Reply to template&amp;lt;double X&amp;gt; on Wed, 08 Aug 2007 09:02:01 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13624">@Simon2</a></p>
<p>An sich ist ein template natürlich eine gute Idee.<br />
Wenn man die Range noch variabel hält, dann hat mein eine universell einsetzbare Klasse.</p>
<p>Ich bin nicht auf die templates eingegangen,<br />
weil er offsensichtlich sich nicht mit templates auskennt<br />
und &quot;nur double Werte zwischen -90.0 und 90.0&quot; haben möchte <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/1340597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340597</guid><dc:creator><![CDATA[Airdamn]]></dc:creator><pubDate>Wed, 08 Aug 2007 09:02:01 GMT</pubDate></item><item><title><![CDATA[Reply to template&amp;lt;double X&amp;gt; on Wed, 08 Aug 2007 09:04:47 GMT]]></title><description><![CDATA[<p>Airdamn schrieb:</p>
<blockquote>
<p>...<br />
weil er ... &quot;nur double Werte zwischen -90.0 und 90.0&quot; haben möchte <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>
</blockquote>
<p>Ich hatte das</p>
<p>hanebuechen schrieb:</p>
<blockquote>
<p>...<br />
Was ich eigentlich versuche zu machen, ist ein Limited/Ranged Datentyp, z.B. ...</p>
</blockquote>
<p>ein wenig umfassender verstanden - aber ist ja auch egal.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1340599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340599</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 08 Aug 2007 09:04:47 GMT</pubDate></item><item><title><![CDATA[Reply to template&amp;lt;double X&amp;gt; on Wed, 08 Aug 2007 09:21:02 GMT]]></title><description><![CDATA[<p>Wie oben schon gesagt wurde, gehoeren Fliesskommazahlen als templateparameter noch nicht zum Standard. Noch, denn soweit ich das mitbekommen habe ist sowas fuer den kommenden Standard in Diskussion.<br />
Bis dahin kannst du das Problem umgehen, indem du eine policy einfuehrst, die den Wert kapselt:</p>
<pre><code class="language-cpp">struct DH90_0 { static const double val = 90.0; };
struct DH4_5 { static const double val = 4.5; };

template&lt;class DblHolder&gt;
class Blah
{
   double maxRange = DblHolder::val;
...
};
</code></pre>
<p>und dann beispielsweise</p>
<pre><code class="language-cpp">Blah&lt;DH90_0&gt; myBlah;  //hier ist maxRange = 90.0
</code></pre>
<p>Du kannst jederzeit wenn du es brauchst ein neues struct definieren, das den double Wert val definiert und dieses Struct an Stelle des double als template parameter uebergeben.<br />
Alternativ kannst du im template privat von DblHolder erben, dann ist val ein geerbtes privates member von Blah&lt;&gt;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1340610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340610</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 08 Aug 2007 09:21:02 GMT</pubDate></item><item><title><![CDATA[Reply to template&amp;lt;double X&amp;gt; on Wed, 08 Aug 2007 09:24:52 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Wie Du selbst schon schreibst:</p>
<p>hanebuechen schrieb:</p>
<blockquote>
<p>...&quot;'double' is not a valid type for template constant parameter&quot;...</p>
</blockquote>
<p>Der Standard erlaubt einfach kein double als &quot;Konstantenparameter&quot;.<br />
Ich glaube, Du hast auch den &quot;Konstantenparameter&quot; von templates missverstanden.</p>
</blockquote>
<p>Ich suche eigentlich nach der Begründung warum mein Besipiel mit int funktioniert/erlaubt ist und mit double nicht? Die Aussage &quot;Der Standard erlaubt es nicht&quot; ist eigentlich nicht das, was ich hören wollte, sondern warum es nicht erlaubt ist.</p>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Wie wär's mit:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class ranged {
   T value, maxValue, T minValue;
   void checkRange(T val) { if(val &gt; maxValue || val &lt; minValue) throw out_of_range(); }
public:
   ranged(T initVal, T maxVal, T minVal) : 
      maxValue(maxVal),
      minValue(minVal) { set(init); }
   void set(T val) { checkRange(initVal); value = initVal; }
};

int main() {
   ranged&lt;int&gt; i(0, -2, 30);
   i.set(7);
   i.set(34);
   ...
}
</code></pre>
</blockquote>
<p>Der Vorschlag ist nicht, was ich erreichen will. Ich möchte Typen ausprägen können, die NICHT zuweisungskompatibel sind. Mit deiner ranged Klasse kann man folgendes machen:</p>
<pre><code class="language-cpp">{
  ranged&lt;double&gt; latitude(0.0, -90.0, 90.0);
  ranged&lt;double&gt; longitude(0.0, -180.0, 180.0);
  latitude = longitude; // Kein Problem
}
</code></pre>
<p>Ich möchte sowas erreichen:</p>
<pre><code class="language-cpp">{
  typedef TypTemplate&lt;double, -90.0, 90.0&gt; Latitude;
  typedef TypTemplate&lt;double, -180.0, 180.0&gt; Longitude;

  Latitude lat(10.0);
  Longitude lon(20.0);

  lat = lon; // Kompiler Error soll erzeugt werden.
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1340613</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340613</guid><dc:creator><![CDATA[hanebuchen]]></dc:creator><pubDate>Wed, 08 Aug 2007 09:24:52 GMT</pubDate></item><item><title><![CDATA[Reply to template&amp;lt;double X&amp;gt; on Wed, 08 Aug 2007 11:24:54 GMT]]></title><description><![CDATA[<p>EDIT: Dieser Post bezieht sich auf pumuckls Anmerkung...</p>
<p>Oh - das ist auch schön !! <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="👍"
    /> <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>
<p>... kommt allerdings ein wenig darauf an, wie solcher &quot;structs&quot; man braucht. Das wird schnell unübersichtlich, wenn es zu viele sind ...</p>
<p>Aber bei wenigen ist das eine schöne Gelegenheit, &quot;verbotene Mischungen&quot; vom Compiler angezeigt zu bekommen.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1340615</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340615</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 08 Aug 2007 11:24:54 GMT</pubDate></item><item><title><![CDATA[Reply to template&amp;lt;double X&amp;gt; on Wed, 08 Aug 2007 09:43:11 GMT]]></title><description><![CDATA[<p>hanebuchen schrieb:</p>
<blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Wie Du selbst schon schreibst:</p>
<p>hanebuechen schrieb:</p>
<blockquote>
<p>...&quot;'double' is not a valid type for template constant parameter&quot;...</p>
</blockquote>
<p>Der Standard erlaubt einfach kein double als &quot;Konstantenparameter&quot;.<br />
Ich glaube, Du hast auch den &quot;Konstantenparameter&quot; von templates missverstanden.</p>
</blockquote>
<p>Ich suche eigentlich nach der Begründung warum mein Besipiel mit int funktioniert/erlaubt ist und mit double nicht? Die Aussage &quot;Der Standard erlaubt es nicht&quot; ist eigentlich nicht das, was ich hören wollte, sondern warum es nicht erlaubt ist.</p>
</blockquote>
<p>Tröstet es dich, wenn ich dir sage, dass du als Template-Parameter eine Referenz bzw. einen Zeiger auf ein double angeben kannst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1340626</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340626</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Wed, 08 Aug 2007 09:43:11 GMT</pubDate></item><item><title><![CDATA[Reply to template&amp;lt;double X&amp;gt; on Wed, 08 Aug 2007 09:50:23 GMT]]></title><description><![CDATA[<p>hanebuchen schrieb:</p>
<blockquote>
<p>Ich suche eigentlich nach der Begründung warum mein Besipiel mit int funktioniert/erlaubt ist und mit double nicht? Die Aussage &quot;Der Standard erlaubt es nicht&quot; ist eigentlich nicht das, was ich hören wollte, sondern warum es nicht erlaubt ist.</p>
</blockquote>
<p>Die einfache Antwort: historische Gruende. Irgendwann wurden Ints als Templateparameter eingefuehrt, offenbar weil die Notwendigkeit bestand - fuer doubles jedoch noch nicht. Heute stellen sich viele Leute die gleiche Frage wie du auch, unter anderem auch Mitglieder des Standardisierungskommitees - und deshalb werden doubles wohl auch &quot;demnaechst&quot; eingefuehrt. (einige Compiler koennen sie evtl. auch schon)</p>
<p>Die nicht zuweisungskompatiblen Typen erreichst du mit meinem obigen Beispiel. du kannst damit sogar noch etwas weiter gehen:</p>
<pre><code class="language-cpp">struct DH90_0a { static const double val = 90.0; };
struct DH90_0b { static const double val = 90.0; };

ranged&lt;DH90_0a&gt; rangeda;
ranged&lt;DH90_0b&gt; rangedb;
ragenda = rangedb; // FEHLER obwohl die Range die gleiche ist!
</code></pre>
<p>Damit kannst du beispielsweise verschiedene Parameterraeume voneinander unterscheiden, auch wenn sie die gleiche Range haben. (z.B. geographische Breite, galaktische Breite, die Wineklskala auf einem Geodreieck, was weiss ich <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="😉"
    /> )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1340630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340630</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 08 Aug 2007 09:50:23 GMT</pubDate></item><item><title><![CDATA[Reply to template&amp;lt;double X&amp;gt; on Wed, 08 Aug 2007 10:19:56 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>...<br />
Damit kannst du beispielsweise verschiedene Parameterraeume voneinander unterscheiden, auch wenn sie die gleiche Range haben. (z.B. geographische Breite, galaktische Breite, die Wineklskala auf einem Geodreieck, was weiss ich <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="😉"
    /> )</p>
</blockquote>
<p>Danke für die Antwort. Wann ist eigentlich Stichtag für den neuen Standard? <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="🙂"
    /> Ich höre jetzt schon gefühlte 100 Jahre davon... <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="😉"
    /></p>
<p>Gruß, Hanebuechen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1340654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340654</guid><dc:creator><![CDATA[hanebuchen]]></dc:creator><pubDate>Wed, 08 Aug 2007 10:19:56 GMT</pubDate></item><item><title><![CDATA[Reply to template&amp;lt;double X&amp;gt; on Wed, 08 Aug 2007 10:22:09 GMT]]></title><description><![CDATA[<p>ich hab mal was gehoert von &quot;2007 vorgestellt, 2009 verabschiedet und 2010 dann eingefuehrt&quot; - alle Angaben ohne Gewaehr <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1340655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340655</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 08 Aug 2007 10:22:09 GMT</pubDate></item><item><title><![CDATA[Reply to template&amp;lt;double X&amp;gt; on Wed, 08 Aug 2007 11:23:49 GMT]]></title><description><![CDATA[<p>hanebuchen schrieb:</p>
<blockquote>
<p>...<br />
Der Vorschlag ist nicht, was ich erreichen will. ...</p>
</blockquote>
<p>Sorry, das war mir nicht klar - liegt ein wenig daran, dass ich Dich nicht kenne. Es gibt hier genug Fragesteller, die das nicht wissen (und bei Unregistrierten kann man eben keine &quot;Erfahruzngswerte&quot; aufbauen <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="😃"
    /> ).</p>
<p>Funktioniert denn punuckls Ansatz für Dich ?</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1340724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340724</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 08 Aug 2007 11:23:49 GMT</pubDate></item><item><title><![CDATA[Reply to template&amp;lt;double X&amp;gt; on Wed, 08 Aug 2007 12:03:54 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Funktioniert denn punuckls Ansatz für Dich ?</p>
</blockquote>
<p>Yep. Nicht ganz so wie ich's gern hätte, aber so gehts auf alle Fälle. Ich hoffe aber trotzdem dass im neuen Standard Templates mit konstanten Doubles möglich sind... <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>
<p>Gruß, Hanebuechen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1340764</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340764</guid><dc:creator><![CDATA[hanebuechen]]></dc:creator><pubDate>Wed, 08 Aug 2007 12:03:54 GMT</pubDate></item></channel></rss>