<?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[Globale Compile Option: Makro oder Template?]]></title><description><![CDATA[<p>Grüsse zusammen,</p>
<p>Jeder wird dies sicher kennen, wenn man etwas in einer Bibliothek auf unterschiedliche Arten kompilieren kann. TinyXML ist da so ein Fall, mit dem <code>TIXML_USE_STL</code> :</p>
<pre><code class="language-cpp">#define TIXML_USE_STL
#include &quot;tinyxml.h&quot;

// Irgendwo in TinyXML stehen dann wohl Dinge wie:
#ifdef TIXML_USE_STL
// ...
#else
// ...
#endif
</code></pre>
<p>Ich habe mich gerade gefragt, ob man dies nicht anders erledigen könnte, nämlich ohne Makros. Zumindest für einen gewissen Teil mag dies stimmen und ich würde den mal hier hinsetzen:</p>
<pre><code class="language-cpp">template&lt;bool VALUE&gt;
struct OptionXYZ
{
  static bool const isActive = false;
};

// Wenn nun jemand diese Option verwenden möchte, muss er definieren:
template&lt;&gt;
struct OptionXYZ&lt;true&gt;
{
  static bool const isActive = true;
};

// Im Code der Bibliothek stehen dann Dinge wie:
if(OptionXYZ&lt;true&gt;::isActive)
{
  // ...
}
else
{
  // ...
}
</code></pre>
<p>Der Compiler sollte wohl klug genug sein, eine if-Anweisung wegzuoptimieren, wenn die Bedingung immer false ist. Also erreicht man grundsätzlich das gleiche, wie bei den Makros.</p>
<p>Aber ist das nun eine zu grosse Abscheu vor Makros oder ist das wirklich sinnvoll so einzusetzen? Sicher, die Templates bieten hier keinen vollständigen Ersatz, man kann nicht Funktionen anders benennen oder ähnliches, aber in Funktionen drin, kann man Dinge anders ausführen lassen oder gar andere Typen verwenden (Stichwort: Boost.MPL).</p>
<p>Ich bin gespannt auf eure Meinungen.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/226786/globale-compile-option-makro-oder-template</link><generator>RSS for Node</generator><lastBuildDate>Wed, 30 Sep 2026 13:23:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/226786.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 05 Nov 2008 21:01:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Globale Compile Option: Makro oder Template? on Wed, 05 Nov 2008 21:01:44 GMT]]></title><description><![CDATA[<p>Grüsse zusammen,</p>
<p>Jeder wird dies sicher kennen, wenn man etwas in einer Bibliothek auf unterschiedliche Arten kompilieren kann. TinyXML ist da so ein Fall, mit dem <code>TIXML_USE_STL</code> :</p>
<pre><code class="language-cpp">#define TIXML_USE_STL
#include &quot;tinyxml.h&quot;

// Irgendwo in TinyXML stehen dann wohl Dinge wie:
#ifdef TIXML_USE_STL
// ...
#else
// ...
#endif
</code></pre>
<p>Ich habe mich gerade gefragt, ob man dies nicht anders erledigen könnte, nämlich ohne Makros. Zumindest für einen gewissen Teil mag dies stimmen und ich würde den mal hier hinsetzen:</p>
<pre><code class="language-cpp">template&lt;bool VALUE&gt;
struct OptionXYZ
{
  static bool const isActive = false;
};

// Wenn nun jemand diese Option verwenden möchte, muss er definieren:
template&lt;&gt;
struct OptionXYZ&lt;true&gt;
{
  static bool const isActive = true;
};

// Im Code der Bibliothek stehen dann Dinge wie:
if(OptionXYZ&lt;true&gt;::isActive)
{
  // ...
}
else
{
  // ...
}
</code></pre>
<p>Der Compiler sollte wohl klug genug sein, eine if-Anweisung wegzuoptimieren, wenn die Bedingung immer false ist. Also erreicht man grundsätzlich das gleiche, wie bei den Makros.</p>
<p>Aber ist das nun eine zu grosse Abscheu vor Makros oder ist das wirklich sinnvoll so einzusetzen? Sicher, die Templates bieten hier keinen vollständigen Ersatz, man kann nicht Funktionen anders benennen oder ähnliches, aber in Funktionen drin, kann man Dinge anders ausführen lassen oder gar andere Typen verwenden (Stichwort: Boost.MPL).</p>
<p>Ich bin gespannt auf eure Meinungen.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1610872</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1610872</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 05 Nov 2008 21:01:44 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Compile Option: Makro oder Template? on Wed, 05 Nov 2008 21:12:35 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Ich habe mich gerade gefragt, ob man dies nicht anders erledigen könnte, nämlich ohne Makros. Zumindest für einen gewissen Teil mag dies stimmen und ich würde den mal hier hinsetzen:<br />
...<br />
Aber ist das nun eine zu grosse Abscheu vor Makros oder ist das wirklich sinnvoll so einzusetzen?</p>
</blockquote>
<p>Ich würde sagen es liegt einmal daran das man nur mit Makros bestimmte Header ausschließen kann (manchmal wichtig) und vielleicht weil es &quot;üblich&quot; ist. Gegen die Templateversion kann - muss aber nicht - auch noch die zusätzliche Compilezeit sprechen (wobei ich grundsätzlich auch Templates bzw. direkte Sprachmittel den Makros vorziehe).</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1610883</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1610883</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 05 Nov 2008 21:12:35 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Compile Option: Makro oder Template? on Wed, 05 Nov 2008 21:15:45 GMT]]></title><description><![CDATA[<p>Ein Grund dürfte sicherlich sein, dass viele Defines vom Compiler oder per Kommandozeilenoption aus Build-Umgebungen heraus gesetzt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1610885</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1610885</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 05 Nov 2008 21:15:45 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Compile Option: Makro oder Template? on Wed, 05 Nov 2008 21:47:33 GMT]]></title><description><![CDATA[<p>ich denke es verfehlt auch die Kritik an Makros. Dumme Textersetzung ist bedingte Kompilierung ja nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1610892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1610892</guid><dc:creator><![CDATA[JustAnotherNoob]]></dc:creator><pubDate>Wed, 05 Nov 2008 21:47:33 GMT</pubDate></item></channel></rss>