<?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 Constraint]]></title><description><![CDATA[<p>Morgen Leute,</p>
<p>ich war schon mal mit einer ähnlichen Frage bei euch.<br />
Ausgangssituation is folgende:<br />
1. wir dürfen kein Boost verwenden, deshalb versuch ich mir für die Zeit etwas annehmbares selbst zu schreiben.<br />
2. Ich möchte Template Parameter einschränken, geht das?</p>
<p>Hier das Beispiel:</p>
<pre><code class="language-cpp">template &lt;class T&gt;
T read(T lowerBound,T upperBound)
{
// code der irrelevant ist
}
</code></pre>
<p>Frage ist folgende: Kann ich wenn möglich, Template Parameter in diesem Fall nach den Standardtypen einschränken, also int,float.... und Konsorten.<br />
Wenn nein, was wäre eine Alternative?</p>
<p>Oder:<br />
Würdet ihr diese Methode so belassen aber den Verwender bei der Benutzung von eigenen Datentypen dazu auffordern die Operatoren &lt; und &gt; zu überladen?</p>
<p>Viele Grüße und Danke fürs Lesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/294503/template-constraint</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 21:38:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/294503.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 26 Oct 2011 08:33:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template Constraint on Wed, 26 Oct 2011 08:33:48 GMT]]></title><description><![CDATA[<p>Morgen Leute,</p>
<p>ich war schon mal mit einer ähnlichen Frage bei euch.<br />
Ausgangssituation is folgende:<br />
1. wir dürfen kein Boost verwenden, deshalb versuch ich mir für die Zeit etwas annehmbares selbst zu schreiben.<br />
2. Ich möchte Template Parameter einschränken, geht das?</p>
<p>Hier das Beispiel:</p>
<pre><code class="language-cpp">template &lt;class T&gt;
T read(T lowerBound,T upperBound)
{
// code der irrelevant ist
}
</code></pre>
<p>Frage ist folgende: Kann ich wenn möglich, Template Parameter in diesem Fall nach den Standardtypen einschränken, also int,float.... und Konsorten.<br />
Wenn nein, was wäre eine Alternative?</p>
<p>Oder:<br />
Würdet ihr diese Methode so belassen aber den Verwender bei der Benutzung von eigenen Datentypen dazu auffordern die Operatoren &lt; und &gt; zu überladen?</p>
<p>Viele Grüße und Danke fürs Lesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2135926</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2135926</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Wed, 26 Oct 2011 08:33:48 GMT</pubDate></item><item><title><![CDATA[Reply to Template Constraint on Wed, 26 Oct 2011 08:45:24 GMT]]></title><description><![CDATA[<p>Firefighter schrieb:</p>
<blockquote>
<p>Morgen Leute,</p>
<p>ich war schon mal mit einer ähnlichen Frage bei euch.<br />
Ausgangssituation is folgende:<br />
1. wir dürfen kein Boost verwenden, deshalb versuch ich mir für die Zeit etwas annehmbares selbst zu schreiben.<br />
2. Ich möchte Template Parameter einschränken, geht das?</p>
<p>Hier das Beispiel:</p>
<pre><code class="language-cpp">template &lt;class T&gt;
T read(T lowerBound,T upperBound)
{
// code der irrelevant ist
}
</code></pre>
<p>Frage ist folgende: Kann ich wenn möglich, Template Parameter in diesem Fall nach den Standardtypen einschränken, also int,float.... und Konsorten.</p>
</blockquote>
<p>Wozu? Damit mein Typ Rational für Bruchzahlen nicht mehr klappt? Ich würde Dir ins Popöchen treten!</p>
<p>Firefighter schrieb:</p>
<blockquote>
<p>Wenn nein, was wäre eine Alternative?</p>
</blockquote>
<p>Einfach nix tun. Wie meistens in der Informatik könnte es auch hier die beste Lösung sein.</p>
<p>Firefighter schrieb:</p>
<blockquote>
<p>Würdet ihr diese Methode so belassen aber den Verwender bei der Benutzung von eigenen Datentypen dazu auffordern die Operatoren &lt; und &gt; zu überladen?</p>
</blockquote>
<p>Wenn er's nicht tut, kommt doch ein wunderbarer Compilerfehler geflogen. Dann weiß er schon bescheid.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2135937</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2135937</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 26 Oct 2011 08:45:24 GMT</pubDate></item><item><title><![CDATA[Reply to Template Constraint on Wed, 26 Oct 2011 08:46:42 GMT]]></title><description><![CDATA[<p>Firefighter schrieb:</p>
<blockquote>
<p>2. Ich möchte Template Parameter einschränken, geht das?</p>
</blockquote>
<p>Ja. Am schönsten mit SFINAE.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2135939</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2135939</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 26 Oct 2011 08:46:42 GMT</pubDate></item><item><title><![CDATA[Reply to Template Constraint on Wed, 26 Oct 2011 08:49:34 GMT]]></title><description><![CDATA[<p>Also kann ich aus deinem ersten Beitrag schließen ich soll die Methode so belassen wie sie ist, aber am besten in der Doku einen Hinweis darauf machen das der Operator &lt; &gt; für User-defined Types implementiert werden muss. Mal abgesehen von dem <code>operator&gt;&gt;</code> , richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2135941</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2135941</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Wed, 26 Oct 2011 08:49:34 GMT</pubDate></item><item><title><![CDATA[Reply to Template Constraint on Wed, 26 Oct 2011 09:02:29 GMT]]></title><description><![CDATA[<p>Firefighter schrieb:</p>
<blockquote>
<p>Also kann ich aus deinem ersten Beitrag schließen ich soll die Methode so belassen wie sie ist, aber am besten in der Doku einen Hinweis darauf machen das der Operator &lt; &gt; für User-defined Types implementiert werden muss. Mal abgesehen von dem <code>operator&gt;&gt;</code> , richtig?</p>
</blockquote>
<p>Ja.<br />
Vielleicht so: <a href="http://www.cplusplus.com/reference/algorithm/inplace_merge/" rel="nofollow">http://www.cplusplus.com/reference/algorithm/inplace_merge/</a><br />
Also eindeutig im Text und nicht als nervige Tabellenaufzählung.<br />
Und es wäre nett, nur den op&lt; zu verwenden, der reicht hier ja.</p>
<p>Und auf jeden Fall anders nennen als nur read. Oder die beteiligten Stream übergeben lassen. Mag Funktionen haben, die keine Doku brauchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2135948</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2135948</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 26 Oct 2011 09:02:29 GMT</pubDate></item><item><title><![CDATA[Reply to Template Constraint on Wed, 26 Oct 2011 09:10:25 GMT]]></title><description><![CDATA[<p>Meinst du wirklich das mit anders nenne wäre ne Gute Idee? Dann geht mir ja die Überladung an der Stelle flöten? Und warum hilft mir bei dem Problem das <code>inplace_merge</code> ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2135955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2135955</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Wed, 26 Oct 2011 09:10:25 GMT</pubDate></item><item><title><![CDATA[Reply to Template Constraint on Wed, 26 Oct 2011 09:12:51 GMT]]></title><description><![CDATA[<p>Ich glaube der link zum inplace-merge war nur um zu zeigen wie die Dokumentation der Bedingungen für Benutzerdefinierte Typen aussehen könnte.</p>
<p>Und zum Thema überladung: Evtl. machts sinn alle anderen überladenen sachen auch umzubenennen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2135957</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2135957</guid><dc:creator><![CDATA[*Q* 1]]></dc:creator><pubDate>Wed, 26 Oct 2011 09:12:51 GMT</pubDate></item><item><title><![CDATA[Reply to Template Constraint on Wed, 26 Oct 2011 09:14:13 GMT]]></title><description><![CDATA[<p>Alle umbenennen? Ihr meint also ich soll die Überladungne komplett aufgeben? Und jeder Funktion den Namen geben was sie macht? Wäre ne Idee. Hebt das aber nicht etwas die Usability auf?</p>
<p>Ich weiß nich, bin aber für alle Tips dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2135958</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2135958</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Wed, 26 Oct 2011 09:14:13 GMT</pubDate></item><item><title><![CDATA[Reply to Template Constraint on Wed, 26 Oct 2011 09:18:42 GMT]]></title><description><![CDATA[<p>Um das beurteilen zu könnem musst du schon etwas mehr preisgeben - welche überladungen hast du, worin unterscheiden sich diese, was machen die ganzen sachen überhaupt jeweils?</p>
<p>Edit: Warum wird euch boost eigentlich verboten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2135961</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2135961</guid><dc:creator><![CDATA[*Q* 1]]></dc:creator><pubDate>Wed, 26 Oct 2011 09:18:42 GMT</pubDate></item><item><title><![CDATA[Reply to Template Constraint on Wed, 26 Oct 2011 09:20:49 GMT]]></title><description><![CDATA[<p>Firefighter schrieb:</p>
<blockquote>
<p>Und jeder Funktion den Namen geben was sie macht? Wäre ne Idee.</p>
</blockquote>
<p>Eine klasse Idee. Dann stünde nämlich im Quelltext das, was passiert. Und nicht immer nur read.</p>
<blockquote>
<p>Hebt das aber nicht etwas die Usability auf?</p>
</blockquote>
<p>Nein, im Gegenteil. Damit müsste der Entwickler nurnoch schreiben, was er möchte, anstatt bei jeder Gelegenheit nur &quot;read&quot; zu schreiben und zu hoffen, dass durch glückliche Umstände auch eine Funktion gerufen wird, die tut, was er gerne hätte.</p>
<p>Das klingt bei dir ein wenig so, als ob jede Funktion, egal ob sie liest, schreibt, multipliziert oder Erbsen zählt, auf jeden Fall read heißt <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/2135962</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2135962</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 26 Oct 2011 09:20:49 GMT</pubDate></item><item><title><![CDATA[Reply to Template Constraint on Wed, 26 Oct 2011 09:22:43 GMT]]></title><description><![CDATA[<p>Hehe ja das is ne gute Frage, vermutlich ne Grundeinstellung des Professors. An und für sich ist das auch gut so, so lernen die Anfänger bei uns im Kurs wie man sich gewisse Sachen erstmal erarbeitet ehe man mit boost die Großen Kanonen rausholt.</p>
<p>Hier noch meine Restlichen Überladungen:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
T read()
{
	T object;
	details::getInput(object);
	return object;
}
template&lt;class T&gt;
T read(const std::string&amp; promptMessage,bool withNewLine = false)
{
	if(withNewLine)
	 std::cout&lt;&lt;promptMessage&lt;&lt;std::endl;
	else
	 std::cout&lt;&lt;promptMessage;

return read&lt;T&gt;();
}
template &lt;class T&gt;
T read(bool (*Validate)(T),const std::string&amp; prompt)
{
	T obj;
	do
	{
		std::cout&lt;&lt;prompt;
		obj = read&lt;T&gt;();
	}while(!Validate(obj));

	return obj;
}
</code></pre>
<p>Und die bereits gezeigte Überladung für die Grenzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2135964</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2135964</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Wed, 26 Oct 2011 09:22:43 GMT</pubDate></item><item><title><![CDATA[Reply to Template Constraint on Wed, 26 Oct 2011 09:25:35 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Firefighter schrieb:</p>
<blockquote>
<p>Und jeder Funktion den Namen geben was sie macht? Wäre ne Idee.</p>
</blockquote>
<p>Eine klasse Idee. Dann stünde nämlich im Quelltext das, was passiert. Und nicht immer nur read.</p>
<blockquote>
<p>Hebt das aber nicht etwas die Usability auf?</p>
</blockquote>
<p>Nein, im Gegenteil. Damit müsste der Entwickler nurnoch schreiben, was er möchte, anstatt bei jeder Gelegenheit nur &quot;read&quot; zu schreiben und zu hoffen, dass durch glückliche Umstände auch eine Funktion gerufen wird, die tut, was er gerne hätte.</p>
<p>Das klingt bei dir ein wenig so, als ob jede Funktion, egal ob sie liest, schreibt, multipliziert oder Erbsen zählt, auf jeden Fall read heißt <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>Schöne Argumente pumuckl, werd sie auf jedenfall Berücksichtigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2135966</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2135966</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Wed, 26 Oct 2011 09:25:35 GMT</pubDate></item><item><title><![CDATA[Reply to Template Constraint on Wed, 26 Oct 2011 09:34:36 GMT]]></title><description><![CDATA[<p>Firefighter schrieb:</p>
<blockquote>
<p>Alle umbenennen? Ihr meint also ich soll die Überladungne komplett aufgeben? Und jeder Funktion den Namen geben was sie macht? Wäre ne Idee. Hebt das aber nicht etwas die Usability auf?</p>
</blockquote>
<p>Nein! Natürlich nicht read_int, read_double und read_VolkardsBruchzahlentyp.</p>
<p>Ich meine</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
T read_until_range_check_succeeds(istream&amp; in,ostream&amp; placeForInputPromptsAndUserNamecallings,T lowerBoundInclusive,T upperBoundExclusive){
   ...
}
</code></pre>
<p>Oder soll es nur auf cin+cout laufen? Rein in den Funktionsnamen. Oder soll es gar keine Schleife sein, sondern im Fehlerfall eine Exception werfen? Rein in den Funktionsnamen. Oder den Fehlerfall nur den Stream-Status setzen? Nee, dann würde sie ja den istream zurückgeben.</p>
<p>edit: Viel zu spät gepostet. Ist ja schon alles geklärt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2135969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2135969</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 26 Oct 2011 09:34:36 GMT</pubDate></item><item><title><![CDATA[Reply to Template Constraint on Wed, 26 Oct 2011 09:31:57 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a>. Super informationen. Danke. Das ich die Methoden nicht read_int und konsorten nenne is mit schon klar. Ich werd das nochmal überarbeiten. Danke auf jedenfall für die vielen Tips.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2135974</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2135974</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Wed, 26 Oct 2011 09:31:57 GMT</pubDate></item><item><title><![CDATA[Reply to Template Constraint on Wed, 26 Oct 2011 12:59:17 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a>: Eine frage hätte ich aber noch: Wo liegt der Vorteil/Nachteil den Stream als Template PArameter mitzugeben? Wo liegen da generell Vorteile/Nachteile? Warum sollte ich den Stream als Templateparameter mitgeben und wann sollte ich ihn als Funktionsparameter mitgeben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2136109</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2136109</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Wed, 26 Oct 2011 12:59:17 GMT</pubDate></item><item><title><![CDATA[Reply to Template Constraint on Wed, 26 Oct 2011 13:03:47 GMT]]></title><description><![CDATA[<p>Firefighter schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a>: Eine frage hätte ich aber noch: Wo liegt der Vorteil/Nachteil den Stream als Template PArameter mitzugeben? Wo liegen da generell Vorteile/Nachteile? Warum sollte ich den Stream als Templateparameter mitgeben und wann sollte ich ihn als Funktionsparameter mitgeben?</p>
</blockquote>
<p>Das war ein Tippfehler, als ich die Streams oben als Templateargumente machte. Gar keine Absicht.</p>
<p>Theoretisch sollten für volle Generizität die Streams auch sogar Tamplateargumente sein, weil damit auch Stream genommen werden könnten, die wide characters nehmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2136111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2136111</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 26 Oct 2011 13:03:47 GMT</pubDate></item></channel></rss>