<?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 nur Zahlen möglich]]></title><description><![CDATA[<p>Hi</p>
<p>Ich bin grad eine Klasse am schreiben, die ich gerne als Template realisieren möchte, so dass in der Implementierung zwischen int, double, float usw. ausgewählt werden kann.</p>
<p>Ich glaube das geht standardmässig gar nicht, liege ich da richtig? Meine einzige Idee wäre Wrapperklassen zu schreiben, die von einer gemeinsam Klasse, z.B. Number, erben.</p>
<p>Gibts da bessere Konzepte?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/271068/template-nur-zahlen-möglich</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 14:58:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/271068.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 22 Jul 2010 19:28:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template nur Zahlen möglich on Thu, 22 Jul 2010 19:28:50 GMT]]></title><description><![CDATA[<p>Hi</p>
<p>Ich bin grad eine Klasse am schreiben, die ich gerne als Template realisieren möchte, so dass in der Implementierung zwischen int, double, float usw. ausgewählt werden kann.</p>
<p>Ich glaube das geht standardmässig gar nicht, liege ich da richtig? Meine einzige Idee wäre Wrapperklassen zu schreiben, die von einer gemeinsam Klasse, z.B. Number, erben.</p>
<p>Gibts da bessere Konzepte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1930239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1930239</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Thu, 22 Jul 2010 19:28:50 GMT</pubDate></item><item><title><![CDATA[Reply to Template nur Zahlen möglich on Thu, 22 Jul 2010 19:33:46 GMT]]></title><description><![CDATA[<p>Natürlich geht das. Einfach ganz normal einen Template-Typ-Parameter ( <code>typename</code> oder <code>class</code> ) einrichten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1930241</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1930241</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 22 Jul 2010 19:33:46 GMT</pubDate></item><item><title><![CDATA[Reply to Template nur Zahlen möglich on Thu, 22 Jul 2010 20:07:34 GMT]]></title><description><![CDATA[<p>Aber dass NUR Zahlen als Parameter verwendet werden dürfen ohne doppelten Code zu verwenden. Geht das? Wenn ja vielleicht ein ganz kurzes Beispiel?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1930256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1930256</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Thu, 22 Jul 2010 20:07:34 GMT</pubDate></item><item><title><![CDATA[Reply to Template nur Zahlen möglich on Thu, 22 Jul 2010 20:14:09 GMT]]></title><description><![CDATA[<p>icarus2 schrieb:</p>
<blockquote>
<p>Aber dass NUR Zahlen als Parameter verwendet werden dürfen ohne doppelten Code zu verwenden. Geht das? Wenn ja vielleicht ein ganz kurzes Beispiel?</p>
</blockquote>
<p>Definiere Zahl.</p>
<p>Falls damit nur die eingebauten Datentypen (unsigned) char, short, int ,long, float und double meinst: Nein, das geht ohne extreme Tricksereien nicht. Aber warum sollte man dies überhaupt wollen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1930259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1930259</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 22 Jul 2010 20:14:09 GMT</pubDate></item><item><title><![CDATA[Reply to Template nur Zahlen möglich on Thu, 22 Jul 2010 20:15:45 GMT]]></title><description><![CDATA[<p>Dafür gibts <a href="http://www.boost.org/doc/libs/1_43_0/libs/utility/enable_if.html" rel="nofollow">boost::enable_if</a>.</p>
<p>Allerdings würde ich das nicht unbedingt machen. Wenn ein User ein falsches Argument angibt, als du verlangst, dann ist er selber schuld, wenn es nicht kompiliert.</p>
<p>Was spricht denn dagegen, dass man auch andere Parameter angeben kann?</p>
<p>Ich vermute mal, dass du eine Art Vektor Klasse schreibst, wo man üblicherweise lediglich numerische Typen erwartet, was aber kein Grund ist andere Typen aussen vor zu lassen. Wenn ein Typ die erwarteten Operatoren und Funktionen anbietet, dann spricht auch nichts dagegen, dass er die Klasse dann auch benutzen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1930260</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1930260</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 22 Jul 2010 20:15:45 GMT</pubDate></item><item><title><![CDATA[Reply to Template nur Zahlen möglich on Thu, 22 Jul 2010 20:16:55 GMT]]></title><description><![CDATA[<p>Kannst du nicht einfach double nutzen? Da hättest du gar keinen doppelten Code.<br />
Denn Templates sind letztendlich auch nichts anderes als redundanter Code.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class Number
{
private:
	double value_;

public:
	Number(double value) : value_(value) { }
	Number(float value) : value_(value) { }
	Number(int value) : value_(value) { }

	double getDouble() const { return value_; }
	float getFloat() const { return static_cast&lt;float&gt;(value_); }
	int getInt() const { return static_cast&lt;int&gt;(value_); }
};

int main()
{
	Number n1(1), n2(2.1);

	std::cout &lt;&lt; n1.getInt() &lt;&lt; &quot;, &quot; &lt;&lt; n2.getDouble() &lt;&lt; std::endl;
}
</code></pre>
<p>Aber letztendlich hängt es eh von der genauen Situation ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1930262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1930262</guid><dc:creator><![CDATA[mmmm]]></dc:creator><pubDate>Thu, 22 Jul 2010 20:16:55 GMT</pubDate></item><item><title><![CDATA[Reply to Template nur Zahlen möglich on Thu, 22 Jul 2010 20:20:36 GMT]]></title><description><![CDATA[<p>icarus2 schrieb:</p>
<blockquote>
<p>Aber dass NUR Zahlen als Parameter verwendet werden dürfen ohne doppelten Code zu verwenden. Geht das? Wenn ja vielleicht ein ganz kurzes Beispiel?</p>
</blockquote>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

template&lt;typename T&gt;
class Foo{
	static const T dummy=T()+T()*T();//Wird abkacken, wenn + und * nicht gehen
	...//und hier der noemale Code
};

int main()
{
	Foo&lt;double&gt; g;
//	Foo&lt;string&gt; s;
	return 0;
}
</code></pre>
<p>Das erlaubt, daß dein Code noch mit Rational oder std::complex und so geht. Ich denke, das ist so beabsichtigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1930264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1930264</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 22 Jul 2010 20:20:36 GMT</pubDate></item><item><title><![CDATA[Reply to Template nur Zahlen möglich on Thu, 22 Jul 2010 20:23:32 GMT]]></title><description><![CDATA[<p>Naja... weil es in meinem Fall nicht wirlich sinnvoll ist andere Werte zu nehmen (kann sogar zu Fehlern führen).</p>
<p>Da wollte ich fragen ob mein Ansatz schlecht ist, sowas in die Dokumentatino gehört oder wie man das sonst löst.</p>
<p>Kurze Erklärung:<br />
Ich versuche gerade möglichst abstrakt eine Schnittstelle für das Bewegen von Objekten zu schaffen. Es soll dann erst in der Implementierung entschieden werden für welchen Typ man sich entscheidet.</p>
<p>*Edit (Hab einige Beiträge erst jetzt gsehen)<br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18422">@drakon</a><br />
Ich schau mir das mal an. Es macht einfach nicht wirklich sinn da andere Parameter. Gut, vielleicht müsste da wirklich auch der, der die Implementierung schreibt daran denken.</p>
<p>@mmmm<br />
Das wäre eigentlich eine Möglichkeit. Das einzige, was ich eigentlich nicht wollte war die value_ Variable private zu haben, aber eigentlich ist das gar nicht so schlecht. (Halt noch von Java an Interfaces gewohnt ^^)</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a><br />
Durch das static const T dummy=T()+T()*T() wird dann verlangt, dass diese Operatoren unterstützt werden, richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1930265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1930265</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Thu, 22 Jul 2010 20:23:32 GMT</pubDate></item><item><title><![CDATA[Reply to Template nur Zahlen möglich on Thu, 22 Jul 2010 20:21:01 GMT]]></title><description><![CDATA[<p>icarus2 schrieb:</p>
<blockquote>
<p>Da wollte ich fragen ob mein Ansatz schlecht ist, sowas in die Dokumentatino gehört oder wie man das sonst löst.</p>
</blockquote>
<p>Dokumentation ist da der übliche Weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1930268</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1930268</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 22 Jul 2010 20:21:01 GMT</pubDate></item><item><title><![CDATA[Reply to Template nur Zahlen möglich on Thu, 22 Jul 2010 20:24:51 GMT]]></title><description><![CDATA[<p>Oki, dann mach ich das so.</p>
<p>Danke für eure Beiträge.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1930273</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1930273</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Thu, 22 Jul 2010 20:24:51 GMT</pubDate></item><item><title><![CDATA[Reply to Template nur Zahlen möglich on Thu, 22 Jul 2010 20:25:07 GMT]]></title><description><![CDATA[<p>Ah, so meinst du das. Ja, das geht auch, ist aber etwas komplizierter. Zuerst schreibst du dir mittels Template-Spezialisierung eine kleine Metafunktion, welche prüft, ob zwei Typen gleich sind:</p>
<pre><code class="language-cpp">template &lt;typename T, typename U&gt;
struct IsSame
{
	static const bool Value = false;
};

template &lt;typename T&gt;
struct IsSame&lt;T, T&gt;
{
	static const bool Value = true;
};
</code></pre>
<p>Anschliessend noch ein Static-Assert, das eine Bedingung zur Kompilierzeit prüft (bei <code>Condition == false</code> wird ein Kompilierfehler ausgelöst, da das Template für diesen Fall nicht definiert ist):</p>
<pre><code class="language-cpp">template &lt;bool Condition&gt;
struct StaticAssert;

template &lt;&gt;
struct StaticAssert&lt;true&gt;
{
};
</code></pre>
<p>Und dann irgendwo in der Art instanziieren ( <code>sizeof</code> schaut sich einen Ausdruck oder Typ an, ohne ihn komplett auszuwerten):</p>
<pre><code class="language-cpp">sizeof( StaticAssert&lt;
        IsSame&lt;T, int&gt;::Value
     || IsSame&lt;T, double&gt;::Value
     || IsSame&lt;T, float&gt;::Value &gt; );
</code></pre>
<p>Ist natürlich etwas viel Code, aber wenn du z.B. Boost hast, können dir die Type-Traits fast alles abnehmen. Da gibts noch Typlisten und jenste Möglichkeiten, aber das dürfte schonmal reichen. <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/1930275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1930275</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 22 Jul 2010 20:25:07 GMT</pubDate></item><item><title><![CDATA[Reply to Template nur Zahlen möglich on Thu, 22 Jul 2010 20:29:55 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template&lt;typename T&gt;
class Foo{
	static const T dummy=T()+T()*T();//Wird abkacken, wenn + und * nicht gehen
	...//und hier der noemale Code
};
</code></pre>
</blockquote>
<p>Das funktioniert nur für integrale Typen, da Konstanten anderer Typen nicht in der Klassendefinition initialisiert werden dürfen. Also entweder in eine wichtige Methode packen (wichtig, weil der Compiler nicht benutze Funktionstemplates nicht vollständig analysiert und es daher durchgehen lassen könnte) und vielleicht mit <code>sizeof</code> den Dummy einsparen, oder direkt einen anderen Weg gehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1930278</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1930278</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 22 Jul 2010 20:29:55 GMT</pubDate></item><item><title><![CDATA[Reply to Template nur Zahlen möglich on Thu, 22 Jul 2010 20:34:01 GMT]]></title><description><![CDATA[<p>Ahh, so langsam fange ich an dieses Metazeugs zu lieben. Es erfordert etwas anderes Denken, aber es scheint echt nützlich zu sein. <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/1930283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1930283</guid><dc:creator><![CDATA[mmmmm]]></dc:creator><pubDate>Thu, 22 Jul 2010 20:34:01 GMT</pubDate></item><item><title><![CDATA[Reply to Template nur Zahlen möglich on Sun, 25 Jul 2010 14:09:22 GMT]]></title><description><![CDATA[<p>So, endlich mal wieder Zeit hier reinzuschauen.</p>
<p>Habe gerade etwas Mühe das Beispiel zu verstehen, ist wirklich etwas kompliziert ^^</p>
<p>Zum ersten Code-Snippet:<br />
Wenn die Typen nicht gleich sind, dann wird Value false (weil das obere IsSame zum Zug kommt). Sind sie gleich, dann wird das untere genommen und Value ist true?</p>
<p>Zum zweiten Code-Snippet:<br />
Du sagst da einfach, dass die bool Condition true sein muss weil es für false nicht definiert ist?</p>
<p>Zum dritten Code-Snippet:<br />
Sobald ein Value false ist, wird der gesamte Ausdruck false ==&gt; Typen nicht gleich ==&gt; Compilfehler?</p>
<p>Habe ich das richtig verstanden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1931383</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1931383</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sun, 25 Jul 2010 14:09:22 GMT</pubDate></item><item><title><![CDATA[Reply to Template nur Zahlen möglich on Sun, 25 Jul 2010 14:12:40 GMT]]></title><description><![CDATA[<p>Genau so ist es.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1931386</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1931386</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 25 Jul 2010 14:12:40 GMT</pubDate></item><item><title><![CDATA[Reply to Template nur Zahlen möglich on Sun, 25 Jul 2010 14:32:17 GMT]]></title><description><![CDATA[<p>Alles klar, vielen Dank euch <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/1931396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1931396</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sun, 25 Jul 2010 14:32:17 GMT</pubDate></item></channel></rss>