<?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[Multiplikation mit Templates]]></title><description><![CDATA[<p>Hey,</p>
<p>wie schaffe ich es, dass ich ein Template schreibe, das folgendes ermöglicht:</p>
<pre><code class="language-cpp">Mul&lt;10, 10&gt;::value
</code></pre>
<p>Ich habe folgendes probiert:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

template&lt;typename T&gt;
struct Mul&lt;T x, T y&gt;
{
	const T value = x * y;
};

int main()
{
	std::cout &lt;&lt; Mul&lt;10, 20&gt;::value &lt;&lt; std::endl;
}
</code></pre>
<p>Leider bringt mir das einen Haufen an Fehlermeldungen. Wie geht sowas richtig?</p>
<p>Das ist natürlich kein Code, den ich wirklich verwenden will. Es ist mehr ein Experiment, um sich mit dem Thema langsam auseinanderzusetzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/281696/multiplikation-mit-templates</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 13:10:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/281696.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 06 Feb 2011 11:35:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Multiplikation mit Templates on Sun, 06 Feb 2011 11:35:12 GMT]]></title><description><![CDATA[<p>Hey,</p>
<p>wie schaffe ich es, dass ich ein Template schreibe, das folgendes ermöglicht:</p>
<pre><code class="language-cpp">Mul&lt;10, 10&gt;::value
</code></pre>
<p>Ich habe folgendes probiert:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

template&lt;typename T&gt;
struct Mul&lt;T x, T y&gt;
{
	const T value = x * y;
};

int main()
{
	std::cout &lt;&lt; Mul&lt;10, 20&gt;::value &lt;&lt; std::endl;
}
</code></pre>
<p>Leider bringt mir das einen Haufen an Fehlermeldungen. Wie geht sowas richtig?</p>
<p>Das ist natürlich kein Code, den ich wirklich verwenden will. Es ist mehr ein Experiment, um sich mit dem Thema langsam auseinanderzusetzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2017282</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2017282</guid><dc:creator><![CDATA[dghdfg]]></dc:creator><pubDate>Sun, 06 Feb 2011 11:35:12 GMT</pubDate></item><item><title><![CDATA[Reply to Multiplikation mit Templates on Sun, 06 Feb 2011 11:40:31 GMT]]></title><description><![CDATA[<p>Sowas hier?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

template &lt;int a, int b&gt;
struct Mul {
	static const int value = a * b;
};

int main() {
	std::cout &lt;&lt; Mul&lt;10, 10&gt;::value;
}
</code></pre>
<p>Was static macht kannst du ja mal nachgoogeln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2017288</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2017288</guid><dc:creator><![CDATA[Incocnito]]></dc:creator><pubDate>Sun, 06 Feb 2011 11:40:31 GMT</pubDate></item><item><title><![CDATA[Reply to Multiplikation mit Templates on Sun, 06 Feb 2011 11:42:07 GMT]]></title><description><![CDATA[<p>Das ist schon sehr gut, aber lässt sich das auch noch so hinbiegen, dass das mit int, float, double, etc. funktioniert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2017290</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2017290</guid><dc:creator><![CDATA[dghdfg]]></dc:creator><pubDate>Sun, 06 Feb 2011 11:42:07 GMT</pubDate></item><item><title><![CDATA[Reply to Multiplikation mit Templates on Sun, 06 Feb 2011 11:50:46 GMT]]></title><description><![CDATA[<p>dghdfg schrieb:</p>
<blockquote>
<p>...float, double, etc. funktioniert?</p>
</blockquote>
<p>Nein. Als Nicht-Typ-Template-Parameter werden nur Ganzzahltypen, Zeiger und Referenzen unterstützt. Letztere nur auf &quot;statische&quot; Objekte / Funktionen mit externer Bindung.</p>
<p>Was willst Du denn <em>eigentlich</em> machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2017292</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2017292</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sun, 06 Feb 2011 11:50:46 GMT</pubDate></item><item><title><![CDATA[Reply to Multiplikation mit Templates on Sun, 06 Feb 2011 11:54:56 GMT]]></title><description><![CDATA[<p>Das würde dann so gehen:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

template &lt;typename T, const T a, const T b&gt;
struct Mul {
	static const T value = a * b;
};

int main() {
	std::cout &lt;&lt; Mul&lt;int, 10, 10&gt;::value &lt;&lt; &quot;\n&quot;;
	//std::cout &lt;&lt; Mul&lt;float, 5.5, 3.3&gt;::value &lt;&lt; &quot;\n&quot;; das geht leider nicht..
}
</code></pre>
<p>Nur leider bei float und double nicht, wie das Internet sagt:</p>
<p>internet schrieb:</p>
<blockquote>
<p>&gt; A template-argument for a non-type, non-template template-parameter<br />
&gt; shall be one of:<br />
&gt; — an integral constant-expression of integral or enumeration type; or<br />
&gt; — the name of a non-type template-parameter; or<br />
&gt; — the address of an object or function with external linkage,</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2017294</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2017294</guid><dc:creator><![CDATA[Incocnito]]></dc:creator><pubDate>Sun, 06 Feb 2011 11:54:56 GMT</pubDate></item><item><title><![CDATA[Reply to Multiplikation mit Templates on Sun, 06 Feb 2011 12:15:01 GMT]]></title><description><![CDATA[<p>Theoretisch müsste man die Rechnung mit floats durch die Rechnung mit Integern emulieren können. Das dürfte auch gar nicht soooo schwierig sein, aber zu viel Arbeit als das ich damit einen Sonntag Nachmittag verbringen möchte. Viel Spaß dabei an Interessierte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2017298</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2017298</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 06 Feb 2011 12:15:01 GMT</pubDate></item><item><title><![CDATA[Reply to Multiplikation mit Templates on Sun, 06 Feb 2011 13:03:48 GMT]]></title><description><![CDATA[<p>Welchen Sinn hat das bitte?</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
T mult(T a, T b)
{
   return a*b;
}

std::cout &lt;&lt; &quot;Result: &quot; &lt;&lt; mult&lt;float&gt;(10,10) &lt;&lt; std::endl;
</code></pre>
<p>Ist das selbe und geht mit allen Typen..<br />
Sorry aber ich verstehe es nicht^^.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2017318</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2017318</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sun, 06 Feb 2011 13:03:48 GMT</pubDate></item><item><title><![CDATA[Reply to Multiplikation mit Templates on Sun, 06 Feb 2011 13:06:35 GMT]]></title><description><![CDATA[<p>Scorcher24 schrieb:</p>
<blockquote>
<p>Ist das selbe und geht mit allen Typen..<br />
Sorry aber ich verstehe es nicht^^.</p>
</blockquote>
<p>Einstieg in die Template-Metaprogrammierung? Man muss eben klein anfangen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2017321</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2017321</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 06 Feb 2011 13:06:35 GMT</pubDate></item><item><title><![CDATA[Reply to Multiplikation mit Templates on Sun, 06 Feb 2011 13:17:45 GMT]]></title><description><![CDATA[<p>Naja er sagte aber</p>
<p>dghdfg schrieb:</p>
<blockquote>
<p>[...] wie schaffe ich es, dass ich ein Template schreibe [...]</p>
</blockquote>
<p>Insofern hat Scorcher24 schon Recht, es muss ja nicht unbedingt so &quot;kompliziert&quot; sein. Und Template-Metaprogrammierung sollte man erstmal auslassen wenn man allgemein mit templates anfängt. Zumindest sieht das mein Buch auch so <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>Ps. Buch: Der C++ Programmierer</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2017325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2017325</guid><dc:creator><![CDATA[Incocnito]]></dc:creator><pubDate>Sun, 06 Feb 2011 13:17:45 GMT</pubDate></item><item><title><![CDATA[Reply to Multiplikation mit Templates on Sun, 06 Feb 2011 13:22:30 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Einstieg in die Template-Metaprogrammierung? Man muss eben klein anfangen.</p>
</blockquote>
<p>Trotzdem darf man auch mal vernünftige Beispiele für Template-Metaprogrammierung wählen <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>Sowas wie eine Compilezeit-Fakultät ist zwar gut, um das Prinzip (funktionale Programmierung mit Templates) zu sehen, wird aber nie eingesetzt werden. Für sinnvolle Anwendungen kann man z.B. was mit Traits machen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2017328</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2017328</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 06 Feb 2011 13:22:30 GMT</pubDate></item><item><title><![CDATA[Reply to Multiplikation mit Templates on Sun, 06 Feb 2011 15:39:01 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Scorcher24 schrieb:</p>
<blockquote>
<p>Ist das selbe und geht mit allen Typen..<br />
Sorry aber ich verstehe es nicht^^.</p>
</blockquote>
<p>Einstieg in die Template-Metaprogrammierung? Man muss eben klein anfangen.</p>
</blockquote>
<p>Gut, wenn er das lernen möchte dann nur zu :D.<br />
Hab das überlesen mit dem Expermiment und das Beispiel sah ein wenig sinnbefreit aus in MEINEN Augen. Ich vermeide sowas wo es nur geht bzw nutze es gar nicht.<br />
Einfacher Code ftw.<br />
Nur meine Meinung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2017369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2017369</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sun, 06 Feb 2011 15:39:01 GMT</pubDate></item><item><title><![CDATA[Reply to Multiplikation mit Templates on Mon, 07 Feb 2011 08:39:47 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Sowas wie eine Compilezeit-Fakultät ist zwar gut, um das Prinzip (funktionale Programmierung mit Templates) zu sehen, wird aber nie eingesetzt werden.</p>
</blockquote>
<p>Es sei denn es geht drum, die Laufzeit zu verkürzen und das gesamte Provlem schon zur Compilezeit durchrechnen zu lassen <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 />
Oder weil man den Ehrgeiz hat (oder so verspielt ist), etwas auch mal per TMP zu lösen.<br />
(Nur zu dumm dass die Verschachtelungstiefe bei Templates meist viel zu schnell erreicht ist...)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2017668</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2017668</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 07 Feb 2011 08:39:47 GMT</pubDate></item><item><title><![CDATA[Reply to Multiplikation mit Templates on Mon, 07 Feb 2011 10:32:37 GMT]]></title><description><![CDATA[<p>Du kannst Fliesskommazahlen statisch emulieren durch rationale Zahlen oder besser noch durch Kettenbrüche. Es gibt auch libs und boost.mpl Erweiterung die genau sowas machen.</p>
<p>Ein Beispiel wäre</p>
<pre><code class="language-cpp">template&lt; class T , T Numerator , T Denominator &gt;
struct rational_number
{
    typedef T value_type;
    typedef rational_number type;

    const static value_type numerator = Numerator;
    const static value_type denominator = Denominator;
};
</code></pre>
<p>Auf diese Werte der Zahl kannst Du dann in etwa so:</p>
<pre><code class="language-cpp">template&lt; class Num &gt;
struct conv
{
    static double get_value( void )
    {
        return static_cast&lt; double &gt;( Num::value );
    }
};

template&lt; class T , T Numerator , T Denominator &gt;
struct conv&lt; rational_number&lt; T , Numerator , Denominator &gt; &gt;
{
    typedef rational_number&lt; T , Numerator , Denominator &gt; num_type;
    static double get_value( void )
    {
        return static_cast&lt; double &gt;( num_type::numerator ) / static_cast&lt; double &gt;( num_type::denominator );
    }
};

int main()
{
    typedef rational_number&lt; long , 1 , 2 &gt; one_half;
    cout &lt;&lt; conv&lt; one_half &gt;::get_value() &lt;&lt; endl;
}
</code></pre>
<p>Ich schrieb übrigens gerade einen kleine Artikel über dieses Thema (und mehr) für das Magazin hier. Sollte bald fertig sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2017716</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2017716</guid><dc:creator><![CDATA[headmyshoulder]]></dc:creator><pubDate>Mon, 07 Feb 2011 10:32:37 GMT</pubDate></item><item><title><![CDATA[Reply to Multiplikation mit Templates on Mon, 07 Feb 2011 15:20:52 GMT]]></title><description><![CDATA[<p>Mach doch Multiplikation durch wiederholte Addition und Addition durch wiederholtes Inkrement <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2017846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2017846</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 07 Feb 2011 15:20:52 GMT</pubDate></item></channel></rss>