<?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 Metaprogrammierung]]></title><description><![CDATA[<p>Aloha</p>
<p>Im nächsten Semester werde ich wohl einen Vortrag über das Thema &quot;Template Metaprogrammierung&quot; halten. Für diesen Vortrag bin ich auf der Suche nach Problemen, die man damit lösen kann.<br />
Das Hindernis an der Sache ist, dass die Lösung nicht zu aufwändig/komplex sein sollte. Auch wenn ich ein &quot;solides&quot; C++ Hintergrundwissen habe, kann ich das nicht zu 100% von meinen Zuhörern erwarten, die aber natürlich alles möglichst leicht verstehen sollen konnen.</p>
<p>Meine bisherigen Beispiele:<br />
1. Fibonacci<br />
2. Fakultät<br />
3. Bestimmung von e mittels Kettenbruch (nutzt 2.)</p>
<p>Diese Beispiele sind noch recht leicht zu verstehen und werden für gewöhnlich auch in Kursen durchgekaut um Leuten die Rekursion näher zu bringen. Was ich noch suche ist ein etwas komplexeres Beispiel. Ich frage hier nicht nach einer Lösung, eher nach Denkanstößen, was man da nehmen könnte <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>Gruß<br />
Shelling</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/282542/template-metaprogrammierung</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 15:59:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/282542.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 21 Feb 2011 23:29:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template Metaprogrammierung on Mon, 21 Feb 2011 23:29:53 GMT]]></title><description><![CDATA[<p>Aloha</p>
<p>Im nächsten Semester werde ich wohl einen Vortrag über das Thema &quot;Template Metaprogrammierung&quot; halten. Für diesen Vortrag bin ich auf der Suche nach Problemen, die man damit lösen kann.<br />
Das Hindernis an der Sache ist, dass die Lösung nicht zu aufwändig/komplex sein sollte. Auch wenn ich ein &quot;solides&quot; C++ Hintergrundwissen habe, kann ich das nicht zu 100% von meinen Zuhörern erwarten, die aber natürlich alles möglichst leicht verstehen sollen konnen.</p>
<p>Meine bisherigen Beispiele:<br />
1. Fibonacci<br />
2. Fakultät<br />
3. Bestimmung von e mittels Kettenbruch (nutzt 2.)</p>
<p>Diese Beispiele sind noch recht leicht zu verstehen und werden für gewöhnlich auch in Kursen durchgekaut um Leuten die Rekursion näher zu bringen. Was ich noch suche ist ein etwas komplexeres Beispiel. Ich frage hier nicht nach einer Lösung, eher nach Denkanstößen, was man da nehmen könnte <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>Gruß<br />
Shelling</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2024489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2024489</guid><dc:creator><![CDATA[-Shelling-]]></dc:creator><pubDate>Mon, 21 Feb 2011 23:29:53 GMT</pubDate></item><item><title><![CDATA[Reply to Template Metaprogrammierung on Mon, 21 Feb 2011 23:52:39 GMT]]></title><description><![CDATA[<p>Denkanstösse sind schwierig. Man muss einfach mal eine Idee haben was man so machen könnte (und das ist sehr vieles; siehe dazu mal &quot;Modern C++ Design&quot; von Andrej Alexandrescu).<br />
Man kann eigentlich noch recht viele Probleme (oder zumindest Teile davon) auf etwas mappen, dass zur Kompilierungszeit gemacht werden kann und dann kann man da üblicherweise auch etwas mit Metaprogrammierung erreichen.</p>
<p>Mal eine kleine Idee, die mir während einer Zugfahrt gekommen ist:<br />
<a href="http://www.drakon.ch/index.php?id=&amp;offset=2&amp;mobile=0&amp;show_entry=94" rel="nofollow">http://www.drakon.ch/index.php?id=&amp;offset=2&amp;mobile=0&amp;show_entry=94</a></p>
<p>musste da die römischen Zeichen und Regeln mit dem Telefon nachschlagen.. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<p>Ist natürlich nur eine Spielerei, aber immerhin nicht das übliche Rekursive Gedöns und nicht so abgedreht wie Typlisten. <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/2024494</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2024494</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 21 Feb 2011 23:52:39 GMT</pubDate></item><item><title><![CDATA[Reply to Template Metaprogrammierung on Tue, 22 Feb 2011 00:05:23 GMT]]></title><description><![CDATA[<p>Ah, herzlichen Dank, sowas hab ich gesucht. Scheint auch nicht zu komplex zu sein, abgesehen von der typedef Geschichte für Neulinge, aber das sollte auch schnell zu erklären sein.<br />
Hast du was dagegen, wenn ich den Code so übernehme?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2024498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2024498</guid><dc:creator><![CDATA[-Shelling-]]></dc:creator><pubDate>Tue, 22 Feb 2011 00:05:23 GMT</pubDate></item><item><title><![CDATA[Reply to Template Metaprogrammierung on Tue, 22 Feb 2011 00:08:07 GMT]]></title><description><![CDATA[<p>Beispiele wie die Fakultät oder römische Zahlen sind zwar nett, um das Prinzip aufzuzeigen, aber bei mitdenkenden Zuhörern kannst du dich auf die Frage &quot;Wozu braucht man das?&quot; gefasst machen, auf die es nicht wirklich eine sinnvolle Antwort gibt. Denn sowas braucht genau niemand in einem Real-Life-Programm. Bei Techniken, die ohnehin schon sehr komplex sind und dann noch mit konstruierten Anwendungsfällen erklärt werden, entsteht schnell der Eindruck, es handle sich um praxisferne Experimente.</p>
<p>Von daher würde ich mindestens noch etwas erwähnen, was man in seinen C++-Programmen auch einsetzen kann. Ein paar Beispiele von tatsächlichen Anwendungen der Template-Metaprogrammierung:</p>
<ul>
<li>Static Assertions</li>
<li>Policy Based Design</li>
<li>Traits</li>
<li>Erkennen, in welche Typenkategorie ein Typ gehört (z.B. integral)</li>
</ul>
<p>Vieles davon ist natürlich nicht ganz einfach, aber besonders bei den ersten beiden kann man auch als mittelmässiger C++-Programmierer nachvollziehen, wozu sowas gut sein kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2024499</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2024499</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 22 Feb 2011 00:08:07 GMT</pubDate></item><item><title><![CDATA[Reply to Template Metaprogrammierung on Tue, 22 Feb 2011 00:24:27 GMT]]></title><description><![CDATA[<p>-Shelling- schrieb:</p>
<blockquote>
<p>Hast du was dagegen, wenn ich den Code so übernehme?</p>
</blockquote>
<p>Ne, nimm ruhig.</p>
<p>Ehre mich einfach in deinem Vortrag.. :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2024505</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2024505</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 22 Feb 2011 00:24:27 GMT</pubDate></item><item><title><![CDATA[Reply to Template Metaprogrammierung on Tue, 22 Feb 2011 00:36:27 GMT]]></title><description><![CDATA[<p>Da hast du Recht Nexus, auf solche Fragen habe ich mich innerlich auch schon vorbereitet. Allerdings habe ich maximal 20 Minuten Zeit und meine Zuhörerschaft besteht zu 100% aus Java Programmierern, weil dies nunmal die erste Sprache an dieser Hochschule ist. (Wie ich dann zu so einem Thema gekommen bin, lasse ich mal außen vor)</p>
<p>Ich muss also erstmal grob bzw. ausreichend erklären, was Templates überhaupt sind, wie sie funktionieren ect. Darauf aufbauend kann ich dann erst mit meinem eigentlichen Thema anfangen. Erklären was möglich ist, ein paar Beispiele zeigen und erläutern, um letztendlich zu den Vor und Nachteilen der Metaprogrammierung zu kommen und diese wieder zu erklären.</p>
<p>Bei Static Assertions und Policy Based Design schau ich mal, wie das benötigte Wissen dafür aussieht. Auch wenn ich selbst diese beiden Formulierungen noch nicht häufig gehört habe, habe ich eine Vorstellung, was sich dahinter verbergen könnte (Bei Policy Based Design tippe ich spontan auf sowas wie den Allocator-Parameter bei den STL-Containern, richtig?). Jedenfalls werde ich mir dazu noch die eine oder andere Sache durchlesen.</p>
<p>Edit:<br />
Ok, die beiden Themen kann ich wohl noch als konkrete Nutzung mit einbringen, vielen Dank <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>Edit2:<br />
Danke drakon, wird gemacht <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/2024506</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2024506</guid><dc:creator><![CDATA[-Shelling-]]></dc:creator><pubDate>Tue, 22 Feb 2011 00:36:27 GMT</pubDate></item><item><title><![CDATA[Reply to Template Metaprogrammierung on Tue, 22 Feb 2011 02:27:46 GMT]]></title><description><![CDATA[<p>-Shelling- schrieb:</p>
<blockquote>
<p>Was ich noch suche ist ein etwas komplexeres Beispiel.</p>
</blockquote>
<p>Du könntest z.B. ein Metaprogramm machen, das die Goldbachsche Vermutung für eine gegebene Zahl nachprüft. Oder du implementierst die Cantorsche Bijektion \begin{math}\mathbb{N}\rightarrow{\mathbb{N}}\times{\mathbb{N}}\end{math} . Oder du variierst die Goldbach-Vermutung und läßt den Compiler nachrechnen, ob eine Zahl auch <em>Differenz</em> zweier Primzahlen ist. (Wie die zugehörige Vermutung heißt, weiß ich leider nicht; ich habe die Idee aus &quot;Gödel Escher Bach&quot;.) Oder du läßt den Compiler die Goldbach-Vermutung widerlegen.</p>
<p>Wenn ich mich nicht täusche, erfordern die letzten beiden Beispiele mehr oder weniger die Turing-Vollständigkeit der &quot;Sprache&quot; TMP.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2024512</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2024512</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Tue, 22 Feb 2011 02:27:46 GMT</pubDate></item><item><title><![CDATA[Reply to Template Metaprogrammierung on Tue, 22 Feb 2011 10:49:45 GMT]]></title><description><![CDATA[<p>was zwar rekursion ist, aber eig ganz sinnvoll wie ich finde, wäre wenn man das potenzieren in templates verpackt, aber nicht nur so simpel wie auf wikipedia, sondern auch für wurzeln und negative exponenten</p>
<p>wobei mir fällt da grad ein, template parameter können nur ganzahlen sein oder?!?<br />
dann wäre das nämlich schon wieder nutzlos...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2024628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2024628</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 22 Feb 2011 10:49:45 GMT</pubDate></item><item><title><![CDATA[Reply to Template Metaprogrammierung on Tue, 22 Feb 2011 13:32:47 GMT]]></title><description><![CDATA[<p>Ganzzahlige Potenzen kommen in der Praxis schon noch vor. <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/2024710</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2024710</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 22 Feb 2011 13:32:47 GMT</pubDate></item><item><title><![CDATA[Reply to Template Metaprogrammierung on Tue, 22 Feb 2011 14:09:10 GMT]]></title><description><![CDATA[<p>audacia schrieb:</p>
<blockquote>
<p>Wenn ich mich nicht täusche, erfordern die letzten beiden Beispiele mehr oder weniger die Turing-Vollständigkeit der &quot;Sprache&quot; TMP.</p>
</blockquote>
<p>Die Turing-Vollständigkeit von C++-Templates ist theoretisch gegeben. Was nicht gegeben ist, ist die genügende Unterstützung des Compilers. Beispielsweise steigen die meisten Compiler schon bei einer relativ geringen Rekursionstiefe (17 ist vom Standard empfohlen) von templates aus und schmeißen hin: <a href="http://www.netvor.sk/~umage/docs/C++%20Templates%20are%20Turing%20Complete.pdf" rel="nofollow">http://www.netvor.sk/~umage/docs/C++ Templates are Turing Complete.pdf</a></p>
<p>Auf dem 2009er Foren-Treffen hatten wir <a href="http://acm.uva.es/archive/nuevoportal/data/problem.php?p=3521" rel="nofollow">&quot;Joseph's Problem&quot;</a> zu lösen. Beim Versuch, das per TMP-Spielerei vom Compiler erledigen zu lassen hat der MSVC 2008 schon bei ziemlich kleinen Werten aufgegeben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2024715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2024715</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 22 Feb 2011 14:09:10 GMT</pubDate></item><item><title><![CDATA[Reply to Template Metaprogrammierung on Tue, 22 Feb 2011 16:33:20 GMT]]></title><description><![CDATA[<p>Angeregt von einem anderen Thread in diesem Forum, kam mir die Idee, dass man elektrische Widerstandswerte aus Farbcodierungen berechnen könnte. Dann könnte man zur Compilezeit systematisch eine Liste aller möglichen Widerstände erstellen lassen. Fällt zwar auch ein bisschen unter &quot;Wozu braucht man das?&quot; ist aber immerhin eine spannendere Aufgabe als eine Fakultät zu berechnen und kann auch nicht zur Programmierzeit durch einen schnellen Griff zum Taschenrechner ersetzt werden.</p>
<p>Weiterhin kommen hier im Forum regelmäßig dumme Fragen nach Hausaufgaben, die dann oft mit Templatemetaprogrammen beantwortet werden. Oder Geschwindigkeitsoptimierungsfragen, wo Compilezeitlösungen auch immer ganz vorne mit dabei sind. Beispiele:<br />
<a href="http://www.c-plusplus.net/forum/p1913892#1913892" rel="nofollow">Optimiertes Zählen der Dezimalstellen einer Zahl</a>. War jedoch letztendlich langsamer als die if-Kaskade.<br />
<a href="http://www.c-plusplus.net/forum/p1897228#1897228" rel="nofollow">Frage-Antwort Spiel bei dem alle möglichen Pfade zur Compilezeit ausgewertet werden.</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2024844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2024844</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 22 Feb 2011 16:33:20 GMT</pubDate></item><item><title><![CDATA[Reply to Template Metaprogrammierung on Tue, 22 Feb 2011 17:13:21 GMT]]></title><description><![CDATA[<p>Die größten TMP-Helden sind sowieso die Macher von Boost. Meine Favoriten: boost.proto und das damit implementierte boost.spirit</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2024873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2024873</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 22 Feb 2011 17:13:21 GMT</pubDate></item><item><title><![CDATA[Reply to Template Metaprogrammierung on Tue, 22 Feb 2011 17:17:34 GMT]]></title><description><![CDATA[<p>-Shelling- schrieb:</p>
<blockquote>
<p>Da hast du Recht Nexus, auf solche Fragen habe ich mich innerlich auch schon vorbereitet. Allerdings habe ich maximal 20 Minuten Zeit und meine Zuhörerschaft besteht zu 100% aus Java Programmierern</p>
</blockquote>
<p>Umso mehr solltest du darauf achten, ihre Vorurteile nicht zu bestätigen! Sie müssen nach dem Vortrag enttäuscht darüber sein, dass Java sowas nicht bietet :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2024878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2024878</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 22 Feb 2011 17:17:34 GMT</pubDate></item><item><title><![CDATA[Reply to Template Metaprogrammierung on Thu, 10 Mar 2011 00:16:58 GMT]]></title><description><![CDATA[<p>Erstmal Entschuldigung für meine lange Abwesenheit<br />
Zweitens dann vielen vielen Dank für eure Anregungen und Ideen.</p>
<p>Ich hab mir eure Ideen angeschaut und mich dazu entschlossen, auch etwas komplexere Sachen als Beispiele aufzunehmen. Den Rest werde ich wohl als weitere Wegweiser für die Zuhörer nutzen.</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>-Shelling- schrieb:</p>
<blockquote>
<p>Da hast du Recht Nexus, auf solche Fragen habe ich mich innerlich auch schon vorbereitet. Allerdings habe ich maximal 20 Minuten Zeit und meine Zuhörerschaft besteht zu 100% aus Java Programmierern</p>
</blockquote>
<p>Umso mehr solltest du darauf achten, ihre Vorurteile nicht zu bestätigen! Sie müssen nach dem Vortrag enttäuscht darüber sein, dass Java sowas nicht bietet :p</p>
</blockquote>
<p>Ich halte die C++ Flagge schon recht häufig hoch, du glaubst gar nicht, wie oft mich die Java Generics stören <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/2032012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2032012</guid><dc:creator><![CDATA[-Shelling-]]></dc:creator><pubDate>Thu, 10 Mar 2011 00:16:58 GMT</pubDate></item><item><title><![CDATA[Reply to Template Metaprogrammierung on Thu, 10 Mar 2011 00:29:36 GMT]]></title><description><![CDATA[<p>Boost.Spirit wollte ich auch gerade erwähnen.</p>
<p>Aber auch andere Boost Libraries machen nicht halt vor TMP, allen voran natürlich die Boost.MPL <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="🙂"
    /><br />
Anwendungsbeispiele findet man z.B. in der Boost.Statechart oder auch in so &quot;ordinären&quot; Libraries/Klassen wie Boost.Variant (Stichwort Static Visitor).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2032014</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2032014</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 10 Mar 2011 00:29:36 GMT</pubDate></item><item><title><![CDATA[Reply to Template Metaprogrammierung on Thu, 10 Mar 2011 05:42:05 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Denkanstösse sind schwierig. Man muss einfach mal eine Idee haben was man so machen könnte (und das ist sehr vieles; siehe dazu mal &quot;Modern C++ Design&quot; von Andrej Alexandrescu).<br />
Man kann eigentlich noch recht viele Probleme (oder zumindest Teile davon) auf etwas mappen, dass zur Kompilierungszeit gemacht werden kann und dann kann man da üblicherweise auch etwas mit Metaprogrammierung erreichen.</p>
<p>Mal eine kleine Idee, die mir während einer Zugfahrt gekommen ist:<br />
<a href="http://www.drakon.ch/index.php?id=&amp;offset=2&amp;mobile=0&amp;show_entry=94" rel="nofollow">http://www.drakon.ch/index.php?id=&amp;offset=2&amp;mobile=0&amp;show_entry=94</a></p>
<p>musste da die römischen Zeichen und Regeln mit dem Telefon nachschlagen.. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<p>Ist natürlich nur eine Spielerei, aber immerhin nicht das übliche Rekursive Gedöns und nicht so abgedreht wie Typlisten. <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>Der Trick ist doch das #define am Anfang. Zählen defines auch zu Metaprogrammierung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2032020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2032020</guid><dc:creator><![CDATA[hhhhmmmmm]]></dc:creator><pubDate>Thu, 10 Mar 2011 05:42:05 GMT</pubDate></item><item><title><![CDATA[Reply to Template Metaprogrammierung on Thu, 10 Mar 2011 07:08:07 GMT]]></title><description><![CDATA[<p>hhhhmmmmm schrieb:</p>
<blockquote>
<p>Der Trick ist doch das #define am Anfang. Zählen defines auch zu Metaprogrammierung?</p>
</blockquote>
<p>Das #define erspart nur lästiges Tippen. Man könnte es genauso gut ausschreiben oder in eine Metafunktion packen. Die eigentliche Metaprogrammierung liegt ja woanders.<br />
Und prinzipiel: #define und Metaprogrammierung können sich mitunter ganz gut ergänzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2032028</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2032028</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Thu, 10 Mar 2011 07:08:07 GMT</pubDate></item><item><title><![CDATA[Reply to Template Metaprogrammierung on Thu, 10 Mar 2011 08:46:06 GMT]]></title><description><![CDATA[<p>ipsec schrieb:</p>
<blockquote>
<p>[...]Das #define erspart nur lästiges Tippen.[...]</p>
</blockquote>
<p>Nichts anderes tut TMP letzten Endes auch. Und ja, Defines zählen zur Metaprogrammierung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2032053</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2032053</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 10 Mar 2011 08:46:06 GMT</pubDate></item><item><title><![CDATA[Reply to Template Metaprogrammierung on Thu, 10 Mar 2011 09:05:59 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>ipsec schrieb:</p>
<blockquote>
<p>[...]Das #define erspart nur lästiges Tippen.[...]</p>
</blockquote>
<p>Nichts anderes tut TMP letzten Endes auch.</p>
</blockquote>
<p>Nein. Das Templatemetaprogramm wird tatsächlich ausgeführt und etwas berechnet. Das kann man nicht durch Tipparbeit ersetzen, man braucht mindestens noch einen Taschenrechner und ein Gerät welches Entscheidungen treffen kann. Sprich: einen Computer.</p>
<blockquote>
<p>Und ja, Defines zählen zur Metaprogrammierung.</p>
</blockquote>
<p>Ja, ich würde sie trotzdem auch dazu zählen, weil sie in kleinem Umfang etwas erlauben, was der Metaprogrammierung sehr ähnlich ist (so lange man nicht hinter die Kulisse guckt).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2032065</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2032065</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 10 Mar 2011 09:05:59 GMT</pubDate></item><item><title><![CDATA[Reply to Template Metaprogrammierung on Thu, 10 Mar 2011 09:20:57 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Nein. Das Templatemetaprogramm wird tatsächlich ausgeführt und etwas berechnet.[...]</p>
</blockquote>
<p>Ein TMP erzeugt Programmcode aus Templatecode zur Compilezeit, welcher dann ausgeführt werden kann. Das tun Makros auch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2032076</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2032076</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 10 Mar 2011 09:20:57 GMT</pubDate></item><item><title><![CDATA[Reply to Template Metaprogrammierung on Thu, 10 Mar 2011 09:25:01 GMT]]></title><description><![CDATA[<p>Anderswo schon mal verlinkt: <a href="http://vimeo.com/7211030" rel="nofollow">http://vimeo.com/7211030</a> . Wenn ihr Macros aus Scheme oder Lisp sehen und verstehen wuerdet ... Naja, was soll's.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2032079</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2032079</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 10 Mar 2011 09:25:01 GMT</pubDate></item><item><title><![CDATA[Reply to Template Metaprogrammierung on Thu, 10 Mar 2011 09:33:13 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Nein. Das Templatemetaprogramm wird tatsächlich ausgeführt und etwas berechnet.[...]</p>
</blockquote>
<p>Ein TMP erzeugt Programmcode aus Templatecode zur Compilezeit, welcher dann ausgeführt werden kann. Das tun Makros auch.</p>
</blockquote>
<p>Nein! Das ist ein ganz großer Unterschied zwischen einer simplen Textersetzung und einer Turing-vollständigen Programmiersprache.</p>
<p>Erklär mir mal, wie du ein static assert durch mehr Tippen ausgleichen willst. Oder wie du das Berechnen von Zahlenfolgen zur Compilezeit durch Tippen ausgleichen willst (außer mit einem anderen Programm diese Zahlen zu Berechnen und dann abzutippen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2032089</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2032089</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 10 Mar 2011 09:33:13 GMT</pubDate></item><item><title><![CDATA[Reply to Template Metaprogrammierung on Thu, 10 Mar 2011 09:41:45 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Tachyon schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Nein. Das Templatemetaprogramm wird tatsächlich ausgeführt und etwas berechnet.[...]</p>
</blockquote>
<p>Ein TMP erzeugt Programmcode aus Templatecode zur Compilezeit, welcher dann ausgeführt werden kann. Das tun Makros auch.</p>
</blockquote>
<p>Nein! Das ist ein ganz großer Unterschied zwischen einer simplen Textersetzung und einer Turing-vollständigen Programmiersprache.</p>
<p>Erklär mir mal, wie du ein static assert durch mehr Tippen ausgleichen willst. Oder wie du das Berechnen von Zahlenfolgen zur Compilezeit durch Tippen ausgleichen willst (außer mit einem anderen Programm diese Zahlen zu Berechnen und dann abzutippen).</p>
</blockquote>
<p>Den Static-Assert kann ich z.B. durch tippen bekommen, indem ich an jeder Stelle an der geprüft werden soll ein Array hinbastel, dass im Fehlerfall die Größe -1 bekommt.<br />
Berechnungen z.B. N! bekommt ich, indem ich den Code bis N von Hand eintippe. (N=5 -&gt; 2 * 3 * 4 * 5 -&gt; mehr Tipparbeit). Der TMP-Code für ! wird ja nicht zur Laufzeit ausgeführt, sondern es wird zur Compilezeit eine Konstante erzeugt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2032093</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2032093</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 10 Mar 2011 09:41:45 GMT</pubDate></item><item><title><![CDATA[Reply to Template Metaprogrammierung on Thu, 10 Mar 2011 09:44:30 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Tachyon schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Nein. Das Templatemetaprogramm wird tatsächlich ausgeführt und etwas berechnet.[...]</p>
</blockquote>
<p>Ein TMP erzeugt Programmcode aus Templatecode zur Compilezeit, welcher dann ausgeführt werden kann. Das tun Makros auch.</p>
</blockquote>
<p>Nein! Das ist ein ganz großer Unterschied zwischen einer simplen Textersetzung und einer Turing-vollständigen Programmiersprache.</p>
<p>Erklär mir mal, wie du ein static assert durch mehr Tippen ausgleichen willst. Oder wie du das Berechnen von Zahlenfolgen zur Compilezeit durch Tippen ausgleichen willst (außer mit einem anderen Programm diese Zahlen zu Berechnen und dann abzutippen).</p>
</blockquote>
<p>Den Static-Assert kann ich z.B. durch tippen bekommen, indem ich an jeder Stelle an der geprüft werden soll ein Array hinbastel, dass im Fehlerfall die Größe -1 bekommt.<br />
Berechnungen z.B. N! bekommt ich, indem ich den Code bis N von Hand eintippe. (N=5 -&gt; 2 * 3 * 4 * 5 -&gt; mehr Tipparbeit). Der TMP-Code für ! wird ja nicht zur Laufzeit ausgeführt, sondern es wird zur Compilezeit eine Konstante erzeugt.</p>
</blockquote>
<p>Das war gar nicht die Frage. Da C++ auch ohne TMP Turing-vollständig ist, kannst du alle Berechnungen von TMP-Programmen natürlich auch ohne TMP berechnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2032097</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2032097</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Thu, 10 Mar 2011 09:44:30 GMT</pubDate></item><item><title><![CDATA[Reply to Template Metaprogrammierung on Thu, 10 Mar 2011 09:48:52 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>Das war gar nicht die Frage. Da C++ auch ohne TMP Turing-vollständig ist, kannst du alle Berechnungen von TMP-Programmen natürlich auch ohne TMP berechnen.</p>
</blockquote>
<p>Aber die Antwort.<br />
Ein TMP tut nichts anderes, als aus einer Template-Parametrisierung zur Compilezeit! Code/Konstanten/Typen zu generieren. Anstatt ein Template zu nehmen, kann ich auch den Code für alle im Programm benutzen Template-Parameter (die ja zur Compilezeit bereits existieren müssen), von Hand eintippen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2032100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2032100</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 10 Mar 2011 09:48:52 GMT</pubDate></item><item><title><![CDATA[Reply to Template Metaprogrammierung on Thu, 10 Mar 2011 09:58:12 GMT]]></title><description><![CDATA[<p>Dass man alles, was TMP berechnet, von Hand berechnen kann, ist klar, da wir Menschen auch &quot;Turing-vollständig&quot; sind.</p>
<p>Wie aber lässt du deinen Compiler ohne TMP die Fakultät ausrechnen? (Explizit, nicht darauf vertrauend, dass er 1*2*3*4*5 auswerten wird.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2032103</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2032103</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Thu, 10 Mar 2011 09:58:12 GMT</pubDate></item></channel></rss>