<?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[Präprozessor]]></title><description><![CDATA[<p>Hi... ich hab ein bischen Quellcode gefunden und würde diesen nun auch gerne verstehen <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="🙂"
    /> (siehe <a href="http://www.codeproject.com/cpp/ratkfactory.asp" rel="nofollow">http://www.codeproject.com/cpp/ratkfactory.asp</a>)</p>
<pre><code class="language-cpp">#define REGISTER_CLASS(factory, class_name, key)				\
	class_factory_wrapper _register_class_##class_name((factory.register_class((class_name*)0, key), 0));
</code></pre>
<p>Eigentlich verstehe ich soweit alles ganz gut... aber die oben gezeigte Zeile bereite mir Kopfschmerzen... kann mir da jemand erklären was dort passiert?</p>
<p>Es gibt die folgende Klasse</p>
<pre><code class="language-cpp">class class_factory_wrapper
{
public:
	class_factory_wrapper(int) {}
};
</code></pre>
<p>Aber was macht</p>
<pre><code class="language-cpp">_register_class_##class_name((factory.register_class((class_name*)0, key), 0));
</code></pre>
<p>Bitte um Erklärung :)... und danke schonmal jetzt für jegliche Hilfe <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/topic/172915/präprozessor</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 04:30:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/172915.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 09 Feb 2007 15:53:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Präprozessor on Fri, 09 Feb 2007 15:53:50 GMT]]></title><description><![CDATA[<p>Hi... ich hab ein bischen Quellcode gefunden und würde diesen nun auch gerne verstehen <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="🙂"
    /> (siehe <a href="http://www.codeproject.com/cpp/ratkfactory.asp" rel="nofollow">http://www.codeproject.com/cpp/ratkfactory.asp</a>)</p>
<pre><code class="language-cpp">#define REGISTER_CLASS(factory, class_name, key)				\
	class_factory_wrapper _register_class_##class_name((factory.register_class((class_name*)0, key), 0));
</code></pre>
<p>Eigentlich verstehe ich soweit alles ganz gut... aber die oben gezeigte Zeile bereite mir Kopfschmerzen... kann mir da jemand erklären was dort passiert?</p>
<p>Es gibt die folgende Klasse</p>
<pre><code class="language-cpp">class class_factory_wrapper
{
public:
	class_factory_wrapper(int) {}
};
</code></pre>
<p>Aber was macht</p>
<pre><code class="language-cpp">_register_class_##class_name((factory.register_class((class_name*)0, key), 0));
</code></pre>
<p>Bitte um Erklärung :)... und danke schonmal jetzt für jegliche Hilfe <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/1225767</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1225767</guid><dc:creator><![CDATA[Meyer123]]></dc:creator><pubDate>Fri, 09 Feb 2007 15:53:50 GMT</pubDate></item><item><title><![CDATA[Reply to Präprozessor on Fri, 09 Feb 2007 16:36:47 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#define REGISTER_CLASS(factory, class_name, key)                \ 
    class_factory_wrapper _register_class_##class_name((factory.register_class((class_name*)0, key), 0));
</code></pre>
<p>das ist eine Makro-Definition</p>
<p>Steht jetzt im Quelltext</p>
<pre><code class="language-cpp">REGISTER_CLASS(factoryX, class_nameX, keyX)
</code></pre>
<p>expandiert der Präprozessor dies zu</p>
<pre><code class="language-cpp">class_factory_wrapper _register_class_class_nameX((factoryX.register_class((class_nameX*)0, keyX), 0));
</code></pre>
<p>so bekommt der Compiler es zu sehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1225791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1225791</guid><dc:creator><![CDATA[123]]></dc:creator><pubDate>Fri, 09 Feb 2007 16:36:47 GMT</pubDate></item><item><title><![CDATA[Reply to Präprozessor on Mon, 12 Feb 2007 15:00:42 GMT]]></title><description><![CDATA[<p>Schonmal danke für die Antwort...</p>
<p>Aber :)... was macht denn nun</p>
<pre><code class="language-cpp">class_factory_wrapper _register_class_class_nameX((factoryX.register_class((class_nameX*)0, keyX), 0));
</code></pre>
<p>?</p>
<p>Denn die Klasse</p>
<pre><code class="language-cpp">class class_factory_wrapper
{
public:
    class_factory_wrapper(int) {}
};
</code></pre>
<p>Macht ja nicht wirklich was... sie bekommt EINEN int übergeben aber wieso wird aus dem hier ein int</p>
<pre><code class="language-cpp">_register_class_class_nameX((factoryX.register_class((class_nameX*)0, keyX), 0))
</code></pre>
<p>Ich versteh das nicht <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/1227455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1227455</guid><dc:creator><![CDATA[Meyer123]]></dc:creator><pubDate>Mon, 12 Feb 2007 15:00:42 GMT</pubDate></item><item><title><![CDATA[Reply to Präprozessor on Mon, 12 Feb 2007 15:57:02 GMT]]></title><description><![CDATA[<p>Tja, das ist wirklich trickreich.</p>
<p>Durch die doppelten Klammern im Konstruktoraufruf werden NICHT zwei Parameter übergeben, sondern es wird der Sequenzoperator benutzt, so daß nur der letzte Wert (0) als Parameter an den Konstruktor übergeben wird.</p>
<p>Und vorher wird dann die Klasse bei der Factory registriert (bzw. zumindestens der Key).</p>
<p>Man hätte auch erst die Klasse registrieren können und dann die Variable anlegen können.</p>
<p>Aber damit dies auch für globale Variablen funktioniert, wurde anscheinend obiger Ansatz gewählt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1227504</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1227504</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Mon, 12 Feb 2007 15:57:02 GMT</pubDate></item><item><title><![CDATA[Reply to Präprozessor on Tue, 13 Feb 2007 10:15:07 GMT]]></title><description><![CDATA[<p>Danke Th... so ganz verstehe ich das noch nicht... Du schreibst</p>
<blockquote>
<p>im Konstruktoraufruf</p>
</blockquote>
<p>in welchem... das Problem welches ich nicht verstehe ist, dass es keine Methode:</p>
<pre><code class="language-cpp">_register_class_class_nameX
</code></pre>
<p>gibt. Woher kommt die? bzw. welche ist das <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>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1227959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1227959</guid><dc:creator><![CDATA[Meyer123]]></dc:creator><pubDate>Tue, 13 Feb 2007 10:15:07 GMT</pubDate></item><item><title><![CDATA[Reply to Präprozessor on Tue, 13 Feb 2007 10:19:06 GMT]]></title><description><![CDATA[<p>Das ist keine Methode. Es wird eine Variable mit diesem Namen angelegt.</p>
<pre><code class="language-cpp">Typ Name((funktion(), 0 ));
</code></pre>
<p>Es wird eine Variable namens &quot;Name&quot; vom Typ &quot;Typ&quot; angelegt, und zwar mit</p>
<pre><code class="language-cpp">(funktion(), 0)
</code></pre>
<p>als Konstruktorparameter. Der Kommaoperator bewirkt hier, dass funktion() aufgerufen wird, der ganze Ausdruck aber hinterher den Wert und Typ von 0 hat.</p>
<p>Jetzt alles klar?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1227961</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1227961</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 13 Feb 2007 10:19:06 GMT</pubDate></item><item><title><![CDATA[Reply to Präprozessor on Tue, 13 Feb 2007 10:21:35 GMT]]></title><description><![CDATA[<p>Halleluja... es ist ein Licht aufgegangen :)... DANKE <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/1227963</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1227963</guid><dc:creator><![CDATA[Meyer123]]></dc:creator><pubDate>Tue, 13 Feb 2007 10:21:35 GMT</pubDate></item></channel></rss>