<?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[Was ist Templatemetaprogrammierung?]]></title><description><![CDATA[<p>Ich weiß zwar was Templates sind, aber der Begriffs Templatemetaprogrammierung verunsichert mich ein wenig. Man könnte doch meinen, sobald man ein Template nutzt, nutzt man auch Metaprogrammierung, denn der eigentliche Programmcode wird aus dem von mir bereitgestellten Template-Code generiert.</p>
<p>In der Wikipedia (<a href="http://de.wikipedia.org/wiki/C%2B%2B-Metaprogrammierung" rel="nofollow">http://de.wikipedia.org/wiki/C%2B%2B-Metaprogrammierung</a>) ist dieses Beispiel für C++ Metaprogrammierung zu finden:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

 template&lt;long B, unsigned long E&gt;
 struct pow_helper {
   static long const value = B * pow_helper&lt;B, E - 1&gt;::value;
 };

 template&lt;long B&gt;
 struct pow_helper&lt;B, 0&gt; {
   static long const value = 1;
 };

 template&lt;long B, long E&gt;
 struct power {
    static double const value;
 };

 template&lt;long B, long E&gt;
 double const power&lt;B, E&gt;::value= E &lt; 0 ? 1.0 / pow_helper&lt;B, E &lt; 0 ? -E : 0&gt;::value
                                        : pow_helper&lt;B, E &lt; 0 ? 0 : E&gt;::value;

 int main() {
   std::cout &lt;&lt; power&lt;10, -3&gt;::value &lt;&lt; std::endl;
 }
</code></pre>
<p>Was wertet der Compiler hier jetzt alles aus? Theoretisch könnte er ja bis auf das Ergebnis runterrechnen, sodass der generierte code so aussieht:</p>
<pre><code class="language-cpp">int main() {
   std::cout &lt;&lt; 0.001 &lt;&lt; std::endl;
 }
</code></pre>
<p>Andererseits weiß ich von Templates, dass die nur Blaupausen für Code sind. Deshalb könnte man meinen, der Compiler generiert Code, der zur Laufzeit die Potenz berechnet.</p>
<p>Was ist Templatemetaprogrammierung nun? Programmierung von Templates, die der Compiler zur Compilezeit komplett, bis auf das gewünschte Ergebnis auswerten kann, oder das generieren lassen von Programmcode? Oder beides zusammen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/217908/was-ist-templatemetaprogrammierung</link><generator>RSS for Node</generator><lastBuildDate>Sat, 10 Oct 2026 07:03:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/217908.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 13 Jul 2008 10:52:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Was ist Templatemetaprogrammierung? on Sun, 13 Jul 2008 10:52:59 GMT]]></title><description><![CDATA[<p>Ich weiß zwar was Templates sind, aber der Begriffs Templatemetaprogrammierung verunsichert mich ein wenig. Man könnte doch meinen, sobald man ein Template nutzt, nutzt man auch Metaprogrammierung, denn der eigentliche Programmcode wird aus dem von mir bereitgestellten Template-Code generiert.</p>
<p>In der Wikipedia (<a href="http://de.wikipedia.org/wiki/C%2B%2B-Metaprogrammierung" rel="nofollow">http://de.wikipedia.org/wiki/C%2B%2B-Metaprogrammierung</a>) ist dieses Beispiel für C++ Metaprogrammierung zu finden:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

 template&lt;long B, unsigned long E&gt;
 struct pow_helper {
   static long const value = B * pow_helper&lt;B, E - 1&gt;::value;
 };

 template&lt;long B&gt;
 struct pow_helper&lt;B, 0&gt; {
   static long const value = 1;
 };

 template&lt;long B, long E&gt;
 struct power {
    static double const value;
 };

 template&lt;long B, long E&gt;
 double const power&lt;B, E&gt;::value= E &lt; 0 ? 1.0 / pow_helper&lt;B, E &lt; 0 ? -E : 0&gt;::value
                                        : pow_helper&lt;B, E &lt; 0 ? 0 : E&gt;::value;

 int main() {
   std::cout &lt;&lt; power&lt;10, -3&gt;::value &lt;&lt; std::endl;
 }
</code></pre>
<p>Was wertet der Compiler hier jetzt alles aus? Theoretisch könnte er ja bis auf das Ergebnis runterrechnen, sodass der generierte code so aussieht:</p>
<pre><code class="language-cpp">int main() {
   std::cout &lt;&lt; 0.001 &lt;&lt; std::endl;
 }
</code></pre>
<p>Andererseits weiß ich von Templates, dass die nur Blaupausen für Code sind. Deshalb könnte man meinen, der Compiler generiert Code, der zur Laufzeit die Potenz berechnet.</p>
<p>Was ist Templatemetaprogrammierung nun? Programmierung von Templates, die der Compiler zur Compilezeit komplett, bis auf das gewünschte Ergebnis auswerten kann, oder das generieren lassen von Programmcode? Oder beides zusammen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1546567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1546567</guid><dc:creator><![CDATA[ich bin ein noob]]></dc:creator><pubDate>Sun, 13 Jul 2008 10:52:59 GMT</pubDate></item><item><title><![CDATA[Reply to Was ist Templatemetaprogrammierung? on Sun, 13 Jul 2008 11:28:32 GMT]]></title><description><![CDATA[<p>Die Template Metaprogrammierung ist zu beidem in der Lage, sowohl zur Berechnung der Werte zur Compile-Zeit als auch zum Generieren von Programmcode, wobei das Generieren von Programmcode wohl wichtiger ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1546584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1546584</guid><dc:creator><![CDATA[Jasc]]></dc:creator><pubDate>Sun, 13 Jul 2008 11:28:32 GMT</pubDate></item><item><title><![CDATA[Reply to Was ist Templatemetaprogrammierung? on Sun, 13 Jul 2008 11:28:51 GMT]]></title><description><![CDATA[<p>ich bin ein noob schrieb:</p>
<blockquote>
<p>Was ist Templatemetaprogrammierung nun? Programmierung von Templates, die der Compiler zur Compilezeit komplett, bis auf das gewünschte Ergebnis auswerten kann, oder das generieren lassen von Programmcode? Oder beides zusammen?</p>
</blockquote>
<p>Beides. in deinem Beispiel berechnet der compiler einfach nur das Ergebnis. Aber man kann mit tmp zum Beispiel ein grundgerüst für das visitor pattern bauen, das dir dann die passenden methoden für die Klassen generiert. Wenn du da wirklich dran interessiert bist, kann ich dir das Buch &quot;modern C++ Design&quot; von Andrei Alexandrescou empfehlen, allerdings kratzt das inzwischen auch nurnoch an der Oberfläche(expression templates schneidet er Beispielsweise nicht an.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1546585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1546585</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sun, 13 Jul 2008 11:28:51 GMT</pubDate></item><item><title><![CDATA[Reply to Was ist Templatemetaprogrammierung? on Sun, 13 Jul 2008 11:31:09 GMT]]></title><description><![CDATA[<p>wenn du templates mit expliziten argumenten fütterst, werden sie bis zum ende hin zusammengefasst, da sie nur noch konstante ausdrücke sind. daher wird der compiler tatsächlich bis 0.001 optimieren, wenn du ihn lässt. wenn du ihm die code-optimierung untersagst, wird er es lassen und den code &quot;1/(10*10*10*1)&quot; generieren und zur laufzeit auswerten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1546586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1546586</guid><dc:creator><![CDATA[ghorst]]></dc:creator><pubDate>Sun, 13 Jul 2008 11:31:09 GMT</pubDate></item><item><title><![CDATA[Reply to Was ist Templatemetaprogrammierung? on Sun, 13 Jul 2008 11:33:27 GMT]]></title><description><![CDATA[<p>Auch &quot;Generative Programming - Methods, Tools and Applications&quot; könnte für dich interessant sein, wenn du dich wirklich tief damit beschäftigen willst, aber das Buch ist wirklich keine leichte Kost und bietet auch noch deutlich mehr in die Richtung generative Programmierung als nur die Template-Metaprogrammierung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1546589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1546589</guid><dc:creator><![CDATA[Jasc]]></dc:creator><pubDate>Sun, 13 Jul 2008 11:33:27 GMT</pubDate></item></channel></rss>