<?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[Templates == Makros?]]></title><description><![CDATA[<p>Sind Templates eigentlich die Makros für C++?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/192984/templates-makros</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 17:27:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/192984.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 20 Sep 2007 17:07:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Templates == Makros? on Thu, 20 Sep 2007 17:07:22 GMT]]></title><description><![CDATA[<p>Sind Templates eigentlich die Makros für C++?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369546</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369546</guid><dc:creator><![CDATA[mjumju]]></dc:creator><pubDate>Thu, 20 Sep 2007 17:07:22 GMT</pubDate></item><item><title><![CDATA[Reply to Templates == Makros? on Thu, 20 Sep 2007 17:17:16 GMT]]></title><description><![CDATA[<p><a href="http://de.wikipedia.org/wiki/C++-Metaprogrammierung" rel="nofollow">http://de.wikipedia.org/wiki/C++-Metaprogrammierung</a></p>
<p>Und... nein. Die Makros aus C gibts auch in C++. Du kannst vieles, was in C durch Makros möglich ist mit Templates umsetzen, das ist richtig, aber Templates bieten einfach noch viel mehr als reine Textersetzung.</p>
<p>Gruß<br />
Don06</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369552</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369552</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Thu, 20 Sep 2007 17:17:16 GMT</pubDate></item><item><title><![CDATA[Reply to Templates == Makros? on Thu, 20 Sep 2007 18:07:52 GMT]]></title><description><![CDATA[<p>Don06 schrieb:</p>
<blockquote>
<p>Templates bieten einfach noch viel mehr als reine Textersetzung.</p>
</blockquote>
<p>Die Formulierung ist vielleicht ein wenig ungeschickt, da sich mit Templates einiges nicht bewerkstelligen lässt was mit &quot;reiner Textersetzung&quot; machbar ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369597</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Thu, 20 Sep 2007 18:07:52 GMT</pubDate></item><item><title><![CDATA[Reply to Templates == Makros? on Thu, 20 Sep 2007 18:34:08 GMT]]></title><description><![CDATA[<p>finix schrieb:</p>
<blockquote>
<p>Die Formulierung ist vielleicht ein wenig ungeschickt, da sich mit Templates einiges nicht bewerkstelligen lässt was mit &quot;reiner Textersetzung&quot; machbar ist.</p>
</blockquote>
<p>Und einiges (wie Typsicherheit...) was sich nicht mit Makros aber mit templates machen lässt. Makros sollte man meiden wo es irgendwo möglich ist (Ausnahme sind dinge wie Inkludeguards).</p>
<p>Zudem sind Templates ein Sprachmittel, Makros nicht (Präprozessor).</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369630</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 20 Sep 2007 18:34:08 GMT</pubDate></item><item><title><![CDATA[Reply to Templates == Makros? on Thu, 20 Sep 2007 18:49:29 GMT]]></title><description><![CDATA[<p>finix schrieb:</p>
<blockquote>
<p>Don06 schrieb:</p>
<blockquote>
<p>Templates bieten einfach noch viel mehr als reine Textersetzung.</p>
</blockquote>
<p>Die Formulierung ist vielleicht ein wenig ungeschickt, da sich mit Templates einiges nicht bewerkstelligen lässt was mit &quot;reiner Textersetzung&quot; machbar ist.</p>
</blockquote>
<p>Hast natürlich Recht. Wollte eig. klar machen das es was anderes ist.<br />
Wie wärs mit:<br />
&quot;Templates sind nunmal einfach was anderes als reine Textersetzung.&quot;<br />
?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369641</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369641</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Thu, 20 Sep 2007 18:49:29 GMT</pubDate></item><item><title><![CDATA[Reply to Templates == Makros? on Thu, 20 Sep 2007 19:05:34 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>Und einiges (wie Typsicherheit...) was sich nicht mit Makros aber mit templates machen lässt.</p>
</blockquote>
<p>Ich kann mich nicht entsinnen das irgendwie auch nur annähernd bestritten zu haben.</p>
<p>Aber jetzt wo du's zur Sprache bringst, was meinst du eigentlich mit Typsicherheit?</p>
<p>asc schrieb:</p>
<blockquote>
<p>Makros sollte man meiden wo es irgendwo möglich ist</p>
</blockquote>
<p>Warum, bzw. wie genau meinst du das?</p>
<p>asc schrieb:</p>
<blockquote>
<p>(Ausnahme sind dinge wie Inkludeguards).</p>
</blockquote>
<p>Was sind denn &quot;<em>Dinge wie</em> Includeguards&quot;?</p>
<p>asc schrieb:</p>
<blockquote>
<p>Zudem sind Templates ein Sprachmittel, Makros nicht (Präprozessor).</p>
</blockquote>
<p>Und? Makros sind im Standard.</p>
<p>asc schrieb:</p>
<blockquote>
<p>cu André</p>
</blockquote>
<p>cu</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369655</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Thu, 20 Sep 2007 19:05:34 GMT</pubDate></item><item><title><![CDATA[Reply to Templates == Makros? on Fri, 21 Sep 2007 05:59:10 GMT]]></title><description><![CDATA[<p>finix schrieb:</p>
<blockquote>
<p>asc schrieb:</p>
<blockquote>
<p>Und einiges (wie Typsicherheit...) was sich nicht mit Makros aber mit templates machen lässt.</p>
</blockquote>
<p>Ich kann mich nicht entsinnen das irgendwie auch nur annähernd bestritten zu haben.</p>
<p>...</p>
<p>asc schrieb:</p>
<blockquote>
<p>Makros sollte man meiden wo es irgendwo möglich ist</p>
</blockquote>
<p>Warum, bzw. wie genau meinst du das?<br />
...</p>
</blockquote>
<p>Ich wüsste nicht das ich dich angegriffen habe. Ich hatte nur etwas ergänzt weil ich deinen Standpunkt zu sehr Markrobetont fand (&quot;...mit Templates einiges nicht bewerkstelligen lässt was mit &quot;reiner Textersetzung&quot; machbar ist...&quot;) ohne deren extreme Nachteile vorgeführt zu bekommen.</p>
<p><a href="http://www.research.att.com/~bs/bs_faq2.html#macro" rel="nofollow">http://www.research.att.com/~bs/bs_faq2.html#macro</a><br />
(So, what's wrong with using macros?; Bjarne Stroustrup's C++ Style and Technique FAQ)</p>
<p>finix schrieb:</p>
<blockquote>
<p>Aber jetzt wo du's zur Sprache bringst, was meinst du eigentlich mit Typsicherheit?</p>
</blockquote>
<p>Vielleicht in der Hinsicht interessant:</p>
<p><a href="http://msdn2.microsoft.com/en-us/library/z3f89ch8(vs.80).aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/z3f89ch8(vs.80).aspx</a><br />
(Advantages of Templates [C++]; MSDN)</p>
<p>finix schrieb:</p>
<blockquote>
<p>asc schrieb:</p>
<blockquote>
<p>(Ausnahme sind dinge wie Inkludeguards).</p>
</blockquote>
<p>Was sind denn &quot;<em>Dinge wie</em> Includeguards&quot;?</p>
</blockquote>
<p>Das sind all jene Dinge, die sich nicht mit den eigentlichen Sprachmitteln umsetzen können. Und, wie ich gleich darauf eingehe sind Makros keine direkten Sprachmittel...</p>
<p>finix schrieb:</p>
<blockquote>
<p>asc schrieb:</p>
<blockquote>
<p>Zudem sind Templates ein Sprachmittel, Makros nicht (Präprozessor).</p>
</blockquote>
<p>Und? Makros sind im Standard.</p>
</blockquote>
<p>Wenn die Links dir das noch nicht beantworten:</p>
<p>Makros sind kein eigentlicher Sprachbestandteil da sie noch vor der Compilierung ausgewertet werden. Es ist ein Mittel des Präprozessors und wie du schon gesagt hast eine reine Testersetzung. Sprich: Makros ändern den Code bevor der Compiler weitere Schritte unternimmt, und es ist sehr schwer fehler zu finden, die durch reine Textersetzung auftreten.</p>
<p>Templates hingegen werden wie jeder andere Code ausgewertet und sind direkte Sprachmittel. Sie werden zwar auch in anderen Code umgesetzt aber in einen Schritt wo der Code als ganzes bearbeitet und compiliert wird.</p>
<p>Ich fasse mal einen der Links ein wenig auf deutsch zusammen:</p>
<pre><code class="language-cpp">// Variante 1: Mit Makros
#define min(i, j) (((i) &lt; (j)) ? (i) : (j))

// Variante 2: Mit Templates
template&lt;class T&gt;
T min(T i, T j)
{
    return ((i &lt; j) ? i : j)
}
</code></pre>
<p>Probleme der Makro- gegenüber der Templateversion:<br />
a) Der Compiler hat keine Möglichkeit zu prüfen ob die Makroparameter miteinander kompatibel sind. Eine Makroersetzung erfolgt gegenüber der Templateversion ohne Typüberprüfung.<br />
b) Der Parameter i und j wird in der Makroversion zweimal ausgewertet (sehr gefährlich mit dingen wie ++i)<br />
c) Da das Makro bereits vom Präprozessor ausgewertet wird, bekommt man die Fehlermeldungen nicht im Bezug zum Makro genannt.</p>
<p>Nächster Punkt:<br />
Mit Templates kann man für spezifische Typen ein Template &quot;spezialisieren&quot; und man hat mit Templates immer den Typ gegeben und kann so Typsicher arbeiten.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369826</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Fri, 21 Sep 2007 05:59:10 GMT</pubDate></item><item><title><![CDATA[Reply to Templates == Makros? on Fri, 21 Sep 2007 06:38:37 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>Probleme der Makro- gegenüber der Templateversion:<br />
a) Der Compiler hat keine Möglichkeit zu prüfen ob die Makroparameter miteinander kompatibel sind. Eine Makroersetzung erfolgt gegenüber der Templateversion ohne Typüberprüfung.<br />
b) Der Parameter i und j wird in der Makroversion zweimal ausgewertet (sehr gefährlich mit dingen wie ++i)<br />
c) Da das Makro bereits vom Präprozessor ausgewertet wird, bekommt man die Fehlermeldungen nicht im Bezug zum Makro genannt.</p>
</blockquote>
<p>d)</p>
<pre><code class="language-cpp">class date_time
{
    ...
    int sec( bool total, int tz_adjust = 0 );
    int min( bool total, int tz_adjust = 0 ); // BOOM
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1369843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369843</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 21 Sep 2007 06:38:37 GMT</pubDate></item><item><title><![CDATA[Reply to Templates == Makros? on Fri, 21 Sep 2007 07:48:28 GMT]]></title><description><![CDATA[<p>Templates != Makros</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369882</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Fri, 21 Sep 2007 07:48:28 GMT</pubDate></item><item><title><![CDATA[Reply to Templates == Makros? on Fri, 21 Sep 2007 08:20:47 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>d)...</p>
</blockquote>
<p>Oh wie konnte ich das nur vergessen *WINAPIAUFDENMONDSCHIESS*...</p>
<p>Also etwas ausführlicher<br />
d) Makros überschreiben rigeros gleichnamige Angaben, ungeachtet von Namensräumen etc. Templates wiederum beachten dies.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/4239">@finix</a><br />
Davon Abgesehen: Ich mag blind sein aber #define etc. sind keine Schlüsselwörter von C/C++. Das mein ich mit Sprachmitteln.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1369903</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1369903</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Fri, 21 Sep 2007 08:20:47 GMT</pubDate></item></channel></rss>