<?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[Makros in C++]]></title><description><![CDATA[<p>In welchem Umfang haltet ihr die Verwendung von Makros in C++ für vertretbar?</p>
<p>Derzeit schreibe ich ein kleines Factory- und Plug-in-Framework. Der Benutzer muß, <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-202195.html" rel="nofollow">da C++ das für Templates nicht implizit macht</a>, statische Klassenmember explizit instantiieren, was auf Dauer etwas häßlich aussieht. Deshalb habe ich die folgenden Makros definiert:</p>
<pre><code class="language-cpp">#define UCL_OO_DEFINE_FACTORY(type)                            \
    template &lt;&gt; ucl::oo::FactoryBase &lt;type&gt;::instantiator_t     \
        ucl::oo::FactoryBase &lt;type&gt;::instantiator

 #define UCL_OO_DEFINE_HELPERINTERFACE(type)                        \
    template &lt;&gt; ucl::oo::HelperInterfaceBase &lt;type&gt;::instantiator_t \
        ucl::oo::HelperInterfaceBase &lt;type&gt;::instantiator
#define UCL_OO_DEFINE_PLUGINMGR(plugindescriptor,baseclass)         \
    namespace ucl { namespace oo { namespace detail {               \
    static ucl::oo::PlugInHostDeclarator _phd (plugindescriptor,    \
        detail::_tryCast &lt;baseclass, PlugInBase&gt;,                   \
        typeid (baseclass).name ());                                \
    } } }
</code></pre>
<p>Wie zu sehen ist, nehmen diese Makros eine Menge an Schreibarbeit ab. Gibt es gute Gründe, hier nicht Makros zu verwenden? Ist das jetzt schlechter Stil?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/204700/makros-in-c</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 20:16:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/204700.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 06 Feb 2008 09:27:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Makros in C++ on Wed, 06 Feb 2008 09:27:11 GMT]]></title><description><![CDATA[<p>In welchem Umfang haltet ihr die Verwendung von Makros in C++ für vertretbar?</p>
<p>Derzeit schreibe ich ein kleines Factory- und Plug-in-Framework. Der Benutzer muß, <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-202195.html" rel="nofollow">da C++ das für Templates nicht implizit macht</a>, statische Klassenmember explizit instantiieren, was auf Dauer etwas häßlich aussieht. Deshalb habe ich die folgenden Makros definiert:</p>
<pre><code class="language-cpp">#define UCL_OO_DEFINE_FACTORY(type)                            \
    template &lt;&gt; ucl::oo::FactoryBase &lt;type&gt;::instantiator_t     \
        ucl::oo::FactoryBase &lt;type&gt;::instantiator

 #define UCL_OO_DEFINE_HELPERINTERFACE(type)                        \
    template &lt;&gt; ucl::oo::HelperInterfaceBase &lt;type&gt;::instantiator_t \
        ucl::oo::HelperInterfaceBase &lt;type&gt;::instantiator
#define UCL_OO_DEFINE_PLUGINMGR(plugindescriptor,baseclass)         \
    namespace ucl { namespace oo { namespace detail {               \
    static ucl::oo::PlugInHostDeclarator _phd (plugindescriptor,    \
        detail::_tryCast &lt;baseclass, PlugInBase&gt;,                   \
        typeid (baseclass).name ());                                \
    } } }
</code></pre>
<p>Wie zu sehen ist, nehmen diese Makros eine Menge an Schreibarbeit ab. Gibt es gute Gründe, hier nicht Makros zu verwenden? Ist das jetzt schlechter Stil?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450314</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450314</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Wed, 06 Feb 2008 09:27:11 GMT</pubDate></item><item><title><![CDATA[Reply to Makros in C++ on Wed, 06 Feb 2008 09:32:48 GMT]]></title><description><![CDATA[<p>Es ist schlechter Stil, die #undef wegzulassen, wenn die Makros nicht mehr benötigt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450322</guid><dc:creator><![CDATA[deha]]></dc:creator><pubDate>Wed, 06 Feb 2008 09:32:48 GMT</pubDate></item><item><title><![CDATA[Reply to Makros in C++ on Wed, 06 Feb 2008 16:02:46 GMT]]></title><description><![CDATA[<p>Makros sind schlechte Stile in C++, aber wie du sagst, können sie einiges an Arbeit abnehmen. Das Problem von Makros sind hald, dass sie die Typensicherheit zerstören und unangenehme/schwer auffindbare Fehler erzeugen können.</p>
<p>Neudefinition eines Makros könnte eintreten, falls jemand den gleichen Namen benutzt und der Compiler entdeckt davon keine Spur. (Was bei dir aber eher unwahrscheinlich ist).</p>
<p>Ich würde bei dir jetzt aber eher ein typedef nehmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450684</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450684</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 06 Feb 2008 16:02:46 GMT</pubDate></item><item><title><![CDATA[Reply to Makros in C++ on Wed, 06 Feb 2008 18:12:13 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Das Problem von Makros sind hald, dass sie die Typensicherheit zerstören und unangenehme/schwer auffindbare Fehler erzeugen können.</p>
</blockquote>
<p>Da die hier gezeigten Makros sich auf eine sehr überschaubare Anzahl an Vorkommnissen beschränken werden, schätze ich das Fehlerpotential durch die Typsicherheit als gering ein, zumal sie hier nur als Deklarationsabkürzung und nicht als inline-Funktionsersatz benutzt werden. Schwerer wiegt vermutlich die Undurchsichtigkeit sowie die kryptischen Fehlermeldungen (die aber bei Templates ohne Concepts genauso vorkommen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> ).</p>
<p>Meine Einstellung zu Makros ist eigentlich recht entspannt. Wann immer sie entbehrlich sind, wo also typedef, static const unsigned oder static const char* den gleichen Effekt erzielen, verzichte ich, insbesondere aufgrund der Namespace-Agnostizität, gerne auf sie. Aber es gibt leider immer wieder Stellen, wo sie mir unverzichtbar scheinen - in meinem aktuellen Projekt eben diese drei.</p>
<p>drakon schrieb:</p>
<blockquote>
<p>Neudefinition eines Makros könnte eintreten, falls jemand den gleichen Namen benutzt und der Compiler entdeckt davon keine Spur. (Was bei dir aber eher unwahrscheinlich ist).</p>
</blockquote>
<p>Sehe ich auch so. Viel eindeutiger kann ich sie wohl nicht benennen. Auf die korrespondierenden #undefs muß ich aber verzichten - oder wo sollten diese stehen? Im Header? Dann kann ich die Makros im Quelltext nicht mehr benutzen.</p>
<p>drakon schrieb:</p>
<blockquote>
<p>Ich würde bei dir jetzt aber eher ein typedef nehmen.</p>
</blockquote>
<p>Wie würdest du das denn bitte anstellen wollen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1450752</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450752</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Wed, 06 Feb 2008 18:12:13 GMT</pubDate></item><item><title><![CDATA[Reply to Makros in C++ on Wed, 06 Feb 2008 18:21:05 GMT]]></title><description><![CDATA[<p>Hmm... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
Habs mir nicht so genau angeschaut. <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>Aber hier sind sie wirklich so vertretbar. Benutze sie ja auch. <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>Ich meine wir fahren ja auch alle Auto, obwohl wir wissen, dass man das nicht SOLLTE. <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/1450756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450756</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 06 Feb 2008 18:21:05 GMT</pubDate></item><item><title><![CDATA[Reply to Makros in C++ on Wed, 06 Feb 2008 23:51:55 GMT]]></title><description><![CDATA[<blockquote>
<p>Ich meine wir fahren ja auch alle Auto, obwohl wir wissen, dass man das nicht SOLLTE. <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>Sonst geht's aber noch? <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/1450944</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1450944</guid><dc:creator><![CDATA[Erhard Henkes]]></dc:creator><pubDate>Wed, 06 Feb 2008 23:51:55 GMT</pubDate></item><item><title><![CDATA[Reply to Makros in C++ on Thu, 07 Feb 2008 11:02:35 GMT]]></title><description><![CDATA[<p>Also Bjarne Stroustrup hat in seinem Buch geschrieben: Sobald man Makros einsetzen muß, zeigt dies eine Schwäche in der Sprache. Soll heißen, wenn du absolut keine C++-Sprachlösung finden kannst, muß üblerweise das Makro herhalten. Gleichzeitig sollte man vielleicht über eine Sprachverbesserung nachdenken, damit man nicht mehr die Makros benutzen muß.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1451099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1451099</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Thu, 07 Feb 2008 11:02:35 GMT</pubDate></item></channel></rss>