<?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[Ein bisschen Makro-Magie]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich will nur mal was Praktisches zeigen, für den der's noch nicht kennt <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>Folgende Ausgangssituation: Ich bastele zur Zeit aus Spaß an der Sache an einem kleinen HTTP-Webserver. Es kommen natürlich ständig Anfragen in Textform von Browsern rein. Diese Anfragen will ich parsen und in einem &quot;Request&quot;-Objekt speichern.<br />
Eine typische Anfrage sieht z.B. so aus:</p>
<pre><code>GET /bla.html HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
</code></pre>
<p>In der ersten Zeile steht das Verb (hier &quot;GET&quot;) und der auszuliefernde Pfad. Die Zeilen danach sind das Interessante: Sie bestehen jeweils aus Schlüssel (z.B. &quot;Accept&quot;) plus Wert (das hinterm Doppelpunkt).<br />
Da mein Webserver-Gerüst möglichst cool sein soll, soll der Benutzer natürlich so eine Abfrage machen können:</p>
<pre><code class="language-cpp">Request bla; // Anfrage schneit herein
vector&lt; pair&lt;double,string&gt; &gt;  accepted_languages = requ.getHeaderAcceptLanguage().getAcceptedLanguages();
</code></pre>
<p>(Ich merke grad, es wäre schöner ohne das <code>getHeaderAcceptLanguage</code> dazwischen, aber dann müsste ich nochmal alles ändern und könnte das gar nicht mehr benutzen, was ich hier zeigen will.)</p>
<p>Gut, zu jedem möglichen (es gibt &gt;40) Schlüssel brauche ich eine Klasse, da der jeweilige Header-Wert oft verschieden geparst werden muss. Alle dieser Header-Klassen haben ein z.T. ähnliches Interface, Standardkonstruktor + Konstruktor(const char*).</p>
<p>Irgendwo in der Request-Klasse wird auch das obige Text-Paket geparst. Dabei gehe ich natürlich jede Zeile durch, gucke mir den Schlüssel an und muss die entsprechende Variable in der Request-Klasse setzen (eine von &gt;40, mit <code>m_header_accept = HeaderAccept(line);</code> ). So, da ich, wenn ich den Schlüssel-Namen habe, nicht ein 40-er <code>if</code> machen will (ich muss ja auch auf die Performance achten), hab ich mir eine Art Factory (ich weiß, es ist keine wirklich Factory, aber wie soll ich's nennen?) gebaut:</p>
<pre><code class="language-cpp">class Request
{
    private:
        void setHeaderAccept( const char* value )
        {
            m_header_accept = HeaderAccept( value );
        }

        // Wird beim Parsen aufgerufen, für jede Schlüssel-Wert-Zeile.
        void setHeaderInfo( const char* key, const char* value )
        {
            typedef void(Request::*SetHeaderFunc)( const char* );
            static map&lt;string,SetHeaderFunc&gt; bla;
            if ( ! bla.size() ) // Map einmalig initialisieren
            {
                bla[&quot;accept&quot;] = &amp;setHeaderAccept;
                // ...
            }

            map&lt;string,SetHeaderFunc&gt;::const_iterator i = bla.find( key );
            if ( i != bla.end() )
                ((*this).*(i-&gt;second))( *this, value );
        }
};
</code></pre>
<p>Ich hoffe das ist soweit verständlich, die map ordnet jedem vorkommenden Schlüssel einen Funktionszeiger zu, bei dessen Aufruf das entsprechende Header-Member-Variablen-Objekt mit seinem Wert initialisiert wird.</p>
<p>Um's zusammenzufassen: Es gibt eine Klasse Request und &gt;40 Klassen, die jeweils eine Header-Art repräsentieren. Die Request-Klasse hat von fast jeder Header-Art-Klasse eine Variable.<br />
Oh, und eine Sache hatte ich noch vergessen: Die Header-Klassen lassen sich in 4 Kategorien unterteilen, General-Header/Entity-Header/Response-Header/Request-Header. Die Request-Klasse hat nur Variablen von den General-, Entity- und Request-Header-Klassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/222579/ein-bisschen-makro-magie</link><generator>RSS for Node</generator><lastBuildDate>Mon, 05 Oct 2026 01:10:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/222579.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 14 Sep 2008 19:52:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Ein bisschen Makro-Magie on Sun, 14 Sep 2008 19:52:37 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich will nur mal was Praktisches zeigen, für den der's noch nicht kennt <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>Folgende Ausgangssituation: Ich bastele zur Zeit aus Spaß an der Sache an einem kleinen HTTP-Webserver. Es kommen natürlich ständig Anfragen in Textform von Browsern rein. Diese Anfragen will ich parsen und in einem &quot;Request&quot;-Objekt speichern.<br />
Eine typische Anfrage sieht z.B. so aus:</p>
<pre><code>GET /bla.html HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
</code></pre>
<p>In der ersten Zeile steht das Verb (hier &quot;GET&quot;) und der auszuliefernde Pfad. Die Zeilen danach sind das Interessante: Sie bestehen jeweils aus Schlüssel (z.B. &quot;Accept&quot;) plus Wert (das hinterm Doppelpunkt).<br />
Da mein Webserver-Gerüst möglichst cool sein soll, soll der Benutzer natürlich so eine Abfrage machen können:</p>
<pre><code class="language-cpp">Request bla; // Anfrage schneit herein
vector&lt; pair&lt;double,string&gt; &gt;  accepted_languages = requ.getHeaderAcceptLanguage().getAcceptedLanguages();
</code></pre>
<p>(Ich merke grad, es wäre schöner ohne das <code>getHeaderAcceptLanguage</code> dazwischen, aber dann müsste ich nochmal alles ändern und könnte das gar nicht mehr benutzen, was ich hier zeigen will.)</p>
<p>Gut, zu jedem möglichen (es gibt &gt;40) Schlüssel brauche ich eine Klasse, da der jeweilige Header-Wert oft verschieden geparst werden muss. Alle dieser Header-Klassen haben ein z.T. ähnliches Interface, Standardkonstruktor + Konstruktor(const char*).</p>
<p>Irgendwo in der Request-Klasse wird auch das obige Text-Paket geparst. Dabei gehe ich natürlich jede Zeile durch, gucke mir den Schlüssel an und muss die entsprechende Variable in der Request-Klasse setzen (eine von &gt;40, mit <code>m_header_accept = HeaderAccept(line);</code> ). So, da ich, wenn ich den Schlüssel-Namen habe, nicht ein 40-er <code>if</code> machen will (ich muss ja auch auf die Performance achten), hab ich mir eine Art Factory (ich weiß, es ist keine wirklich Factory, aber wie soll ich's nennen?) gebaut:</p>
<pre><code class="language-cpp">class Request
{
    private:
        void setHeaderAccept( const char* value )
        {
            m_header_accept = HeaderAccept( value );
        }

        // Wird beim Parsen aufgerufen, für jede Schlüssel-Wert-Zeile.
        void setHeaderInfo( const char* key, const char* value )
        {
            typedef void(Request::*SetHeaderFunc)( const char* );
            static map&lt;string,SetHeaderFunc&gt; bla;
            if ( ! bla.size() ) // Map einmalig initialisieren
            {
                bla[&quot;accept&quot;] = &amp;setHeaderAccept;
                // ...
            }

            map&lt;string,SetHeaderFunc&gt;::const_iterator i = bla.find( key );
            if ( i != bla.end() )
                ((*this).*(i-&gt;second))( *this, value );
        }
};
</code></pre>
<p>Ich hoffe das ist soweit verständlich, die map ordnet jedem vorkommenden Schlüssel einen Funktionszeiger zu, bei dessen Aufruf das entsprechende Header-Member-Variablen-Objekt mit seinem Wert initialisiert wird.</p>
<p>Um's zusammenzufassen: Es gibt eine Klasse Request und &gt;40 Klassen, die jeweils eine Header-Art repräsentieren. Die Request-Klasse hat von fast jeder Header-Art-Klasse eine Variable.<br />
Oh, und eine Sache hatte ich noch vergessen: Die Header-Klassen lassen sich in 4 Kategorien unterteilen, General-Header/Entity-Header/Response-Header/Request-Header. Die Request-Klasse hat nur Variablen von den General-, Entity- und Request-Header-Klassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581912</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581912</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sun, 14 Sep 2008 19:52:37 GMT</pubDate></item><item><title><![CDATA[Reply to Ein bisschen Makro-Magie on Sun, 14 Sep 2008 20:11:56 GMT]]></title><description><![CDATA[<p>So, mein Problem an diesem Punkt war: Es wäre unheimlich viel zu schreiben, ich skizziere mal:</p>
<pre><code class="language-cpp">class Request
{
    public:
        HeaderClassXY&amp; getHeaderClassXY()  { return m_header_class_xy; }
        // ..., ziemlich oft

    private:
        void setHeaderClassXY( const char* value )  { m_header_class_xy = HeaderClassXY(value); }
        // ..., auch ziemlich oft

        // Wird beim Parsen aufgerufen, für jede Schlüssel-Wert-Zeile.
        void setHeaderInfo( const char* key, const char* value )
        {
            static map&lt;string,SetHeaderFunc&gt; bla;
            // ...
            bla[&quot;accept&quot;] = &amp;setHeaderAccept;
            // ..., auch ziemlich oft
        }

        HeaderClassXY m_header_class_xy;
        // auch ziemlich oft
};
</code></pre>
<p>Ein Gräuel das zu schreiben, aber noch grausamer, falls mal irgendwas umgestellt werden soll..</p>
<p>Zum Glück hab ich mich dann aber an was geniales (hey, ich find's zumindest genial!) erinnert, was ich irgendwo irgendwann mal gesehen hatte:</p>
<pre><code class="language-cpp">// Header-Liste, General/Entity/... sind die 4 verschiedenen Arten der Header-Klassen.
#define HEADER_LIST( General, Entity, Request, Response ) \
    Request( Host, host ) \
    Request( UserAgent, user_agent ) \
    General( CacheControl, cache_control ) \
    Entity( Accept, accept ) \                // Steht für &quot;HeaderAccept&quot; und die Kleinschreibweise, für Variablen z.B..
    // ...

// Ein define, was in's Leere geht:
#define HEADER_EMPTY_LIST_ITEM(a,b)
</code></pre>
<p>So, und damit lass ich mir jetzt alles generieren:</p>
<pre><code class="language-cpp">// Für  HeaderClassXY&amp; getHeaderClassXY()  { return m_header_class_xy; }
#define REGISTER_HEADER_GETTER( a, b )  Header##a&amp; getHeader##a() { return m_header_##b; }
    HEADER_LIST( REGISTER_HEADER_GETTER, REGISTER_HEADER_GETTER, REGISTER_HEADER_GETTER, EMPTY_LIST_ITEM )
#undef REGISTER_HEADER_GETTER

// Für  void setHeaderClassXY( const char* value )  { m_header_class_xy = HeaderClassXY(value); }
#define REGISTER_HEADER_HANDLER( a, b )  void setHeader##a( const char* v ) { m_header_##b = Header##a(v); }
    HEADER_LIST( REGISTER_HEADER_HANDLER, REGISTER_HEADER_HANDLER, REGISTER_HEADER_HANDLER, EMPTY_LIST_ITEM )
#undef REGISTER_HEADER_HANDLER

// Um die Map zu füllen mit   bla[&quot;accept&quot;] = &amp;setHeaderAccept;
#define ADD_MAP_ENTRY(a,b)  factory[#b] = &amp;setHeader##a;
    HEADER_LIST( ADD_MAP_ENTRY, ADD_MAP_ENTRY, ADD_MAP_ENTRY, EMPTY_LIST_ITEM )
#undef ADD_MAP_ENTRY

// Und zu guter Letzt für die Membervariablen:
#define ADD_MEM_VAR(a,b)  Header##a  m_header_##b;
    HEADER_LIST( ADD_MEM_VAR, ADD_MEM_VAR, ADD_MEM_VAR, EMPTY_LIST_ITEM )
#undef ADD_MEM_VAR

// Der letzte Makro-Parameter ist immer leer, damit die Header-Klassen der Kategorie Response nicht mit reingenommen werden, sie werden vom Prä-Prozessor durch Nichts ersetzt.
</code></pre>
<p>Genial, oder? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581913</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581913</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sun, 14 Sep 2008 20:11:56 GMT</pubDate></item><item><title><![CDATA[Reply to Ein bisschen Makro-Magie on Sun, 14 Sep 2008 20:06:25 GMT]]></title><description><![CDATA[<p>Typlisten nach Alexandrescu wären hier bestimmt ein wenig eleganter, aber OK.<br />
Und der Zugriff wäre auch nicht so leicht, aber mit Loki wäre das wahrscheinlich noch ein wenig einfacher. <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/1581916</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581916</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 14 Sep 2008 20:06:25 GMT</pubDate></item><item><title><![CDATA[Reply to Ein bisschen Makro-Magie on Sun, 14 Sep 2008 20:19:14 GMT]]></title><description><![CDATA[<p>Wie? Zeig doch mal!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581918</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581918</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sun, 14 Sep 2008 20:19:14 GMT</pubDate></item><item><title><![CDATA[Reply to Ein bisschen Makro-Magie on Sun, 14 Sep 2008 20:26:25 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Genial, oder? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
</blockquote>
<p>Was genau? Die Makro-Magie? Das ist doch uralt. Wird exessiv in Boost benutzt und auch mindestens in einem C++ Artikel im Magazin.<br />
Ich begreif nicht ganz was eigentlich der Zweck dieses Threads sein soll ...</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581919</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581919</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 14 Sep 2008 20:26:25 GMT</pubDate></item><item><title><![CDATA[Reply to Ein bisschen Makro-Magie on Sun, 14 Sep 2008 20:38:07 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Was genau? Die Makro-Magie? Das ist doch uralt. Wird exessiv in Boost benutzt und auch mindestens in einem C++ Artikel im Magazin.</p>
</blockquote>
<p>Ich hatt's erst einmal in irgendeinem non-boost-Sourcecode gesehen, fand's toll, hatte es wieder vergessen und heut beim Programmieren ist's mir eingefallen als ich's gebraucht hab. Hab mich gefreut und find's genial, das muss dich ja nicht tangieren, irgendwer wird's schon noch nicht kennen.</p>
<p>Dravere schrieb:</p>
<blockquote>
<p>Ich begreif nicht ganz was eigentlich der Zweck dieses Threads sein soll ...</p>
</blockquote>
<p>War der erste Satz: Vielleicht interessant für jemanden der's nicht kennt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581922</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581922</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sun, 14 Sep 2008 20:38:07 GMT</pubDate></item><item><title><![CDATA[Reply to Ein bisschen Makro-Magie on Sun, 14 Sep 2008 20:56:46 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Wie? Zeig doch mal!</p>
</blockquote>
<p>Schau doch mal in Loki.</p>
<p>Sollte in etwa das bieten, was du suchst:<br />
<a href="http://loki-lib.sourceforge.net/index.php?n=Main.GenericProgramming" rel="nofollow">http://loki-lib.sourceforge.net/index.php?n=Main.GenericProgramming</a></p>
<p>Genauer: Hierarchy generators.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581925</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581925</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 14 Sep 2008 20:56:46 GMT</pubDate></item><item><title><![CDATA[Reply to Ein bisschen Makro-Magie on Sun, 14 Sep 2008 22:09:02 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Hab mich gefreut und find's genial, das muss dich ja nicht tangieren, irgendwer wird's schon noch nicht kennen.</p>
</blockquote>
<p>Och, es tangiert mich nicht wirklich, fand den Thread nur etwas seltsam. Ich freu mich ja auch immer wieder, wenn ich etwas auf eine einfache Art lösen kann, deswegen mache ich dafür aber nicht einen Thread auf.<br />
Aber weisst du was, es wäre eigentlich wirklich super, wenn dazu mal jemand einen Artikel oder zumindest einen FAQ Beitrag schreiben würde. Könntest zusätzlich noch weitere Magie von Boost anwenden:<br />
<a href="http://www.boost.org/doc/libs/1_36_0/libs/preprocessor/doc/index.html" rel="nofollow">http://www.boost.org/doc/libs/1_36_0/libs/preprocessor/doc/index.html</a></p>
<p>Allgemein ein Artikel über den C++ Präprozessor wäre wirklich eine super Sache. Man sagt eigentlich immer, man soll den Präprozessor meiden, was für Anfänger sicher auch das Beste ist. Wer ihn aber sinnvoll einsetzt, hat ein super zusätzliches Tool. Und wie man ihn einsetzen kann, bzw. wofür alles, das wäre mal ein echt geiler Artikel, bzw. Thread <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üssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581941</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581941</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 14 Sep 2008 22:09:02 GMT</pubDate></item><item><title><![CDATA[Reply to Ein bisschen Makro-Magie on Sun, 14 Sep 2008 22:26:35 GMT]]></title><description><![CDATA[<p>Ich mach ja auch nicht jedesmal einen Thread auf wenn ich mich freue und vor allem sollte es eigentlich gar nicht so ein langer Text werden. Klar erscheint der Thread seltsam, es ist ja auch ausnahmsweise einmal kein &quot;Hab da mal ne Frage&quot;-Thread sondern ein &quot;Kanntet ihr schon?&quot;-Thread.</p>
<p>Das mit dem FAQ-Eintrag/Artikel ist eine gute Idee, mach du doch, scheinst dich doch gut auszukennen <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 />
~Und in der Annahme, dass du &quot;tangieren&quot; evtl falsch verstanden hast: <a href="http://lexikon.meyers.de/meyers/Tangieren~" rel="nofollow">http://lexikon.meyers.de/meyers/Tangieren~</a></p>
<p>drakon, da gibt's zufällig nicht eine Doku (außer DoxyGen) zu? Die Headerdatei versteh ich nicht, keine Ahnung wie ich das benutzen soll <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581945</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581945</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sun, 14 Sep 2008 22:26:35 GMT</pubDate></item><item><title><![CDATA[Reply to Ein bisschen Makro-Magie on Sun, 14 Sep 2008 22:34:34 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>drakon, da gibt's zufällig nicht eine Doku (außer DoxyGen) zu? Die Headerdatei versteh ich nicht, keine Ahnung wie ich das benutzen soll <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
</blockquote>
<p>Naja. Sein Buch. <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 />
Auch wenn Loki bereits mehr beinhaltet, als das, was im Buch gezeigt wird, versteht man den Sinn dahinter, wenn man die lib anschaut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581948</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581948</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 14 Sep 2008 22:34:34 GMT</pubDate></item><item><title><![CDATA[Reply to Ein bisschen Makro-Magie on Sun, 14 Sep 2008 22:42:01 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Ich mach ja auch nicht jedesmal einen Thread auf wenn ich mich freue ...</p>
</blockquote>
<p>Das ist klar, sonst hättest dich ja bisher noch nie gefreut <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>Badestrand schrieb:</p>
<blockquote>
<p>... und vor allem sollte es eigentlich gar nicht so ein langer Text werden.</p>
</blockquote>
<p>Ist es aber geworden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Badestrand schrieb:</p>
<blockquote>
<p>Klar erscheint der Thread seltsam, es ist ja auch ausnahmsweise einmal kein &quot;Hab da mal ne Frage&quot;-Thread sondern ein &quot;Kanntet ihr schon?&quot;-Thread.</p>
</blockquote>
<p>Ok, also, ja, kannte ich schon <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>Badestrand schrieb:</p>
<blockquote>
<p>Das mit dem FAQ-Eintrag/Artikel ist eine gute Idee, mach du doch, scheinst dich doch gut auszukennen <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>
</blockquote>
<p>So weit reisse ich meine Klappe nun aber auch nicht auf, oder? Kenne mich zwar etwas damit aus, aber gut wäre wohl bereits übertrieben. Ich habe zum Beispiel schon erkannt, dass man IntelliSense und VAX damit ziemlich verwirren kann <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 />
Nicht ohne Grund, wäre ich an einem Artikel durchaus interessiert, deutlich mehr als nur an einem: &quot;Hey, schaut! Sowas kann man mit Makros machen, unglaublich!&quot; <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="😃"
    /><br />
Zudem ... hab eher wenig Zeit für sowas. Erst recht, jetzt wo das Studium wieder weitergeht. Sollte daher auch endlich ins Nest <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 />
Und nicht zu letzt, schreib ich nicht gerne Artikel, Pro-/Seminararbeiten usw. Bin halt kein Schreiberling <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>Badestrand schrieb:</p>
<blockquote>
<p>~Und in der Annahme, dass du &quot;tangieren&quot; evtl falsch verstanden hast: <a href="http://lexikon.meyers.de/meyers/Tangieren~" rel="nofollow">http://lexikon.meyers.de/meyers/Tangieren~</a></p>
</blockquote>
<p>Ich kannte das Wort tatsächlich nicht, habe es aber richtig interpretiert. Also insofern nichts falsch verstanden. Ich hatte schliesslich auch einmal Geometrie. Da weiss man was eine Tangente ist, daher konnte ich darauf schliessen, was es wohl bedeuten mag. <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>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581949</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 14 Sep 2008 22:42:01 GMT</pubDate></item><item><title><![CDATA[Reply to Ein bisschen Makro-Magie on Sun, 14 Sep 2008 23:14:10 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Badestrand schrieb:</p>
<blockquote>
<p>... und vor allem sollte es eigentlich gar nicht so ein langer Text werden.</p>
</blockquote>
<p>Ist es aber geworden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
</blockquote>
<p>Ich wollte halt das Drumherum erklären und das auch noch verständlich - und du ahnst gar nicht wie lange man auf die Vorschau warten muss <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>Dravere schrieb:</p>
<blockquote>
<p>Kenne mich zwar etwas damit aus, aber gut wäre wohl bereits übertrieben.</p>
</blockquote>
<p>Muss ja nicht alles drin sein was es gibt auf der Welt, aber wenn's noch ein paar solche Sachen sind wie meine coole Makro-Magie (:)), ist's für Anfänger (oder ungebildete Fortgeschrittene wie mich) ne super Sache. Und guck mal im Infos-zum-Magazin-Forum, wieviele Artikel noch auf einen Autor warten, wenn du's nicht machst, dann wahrscheinlich keiner..</p>
<p>Dravere schrieb:</p>
<blockquote>
<p>Nicht ohne Grund, wäre ich an einem Artikel durchaus interessiert, deutlich mehr als nur an einem: &quot;Hey, schaut! Sowas kann man mit Makros machen, unglaublich!&quot; <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>
</blockquote>
<p>Mach dich nicht lustig, ich find das echt cool! Und abgesehen davon fände ich auch mehr solche kanntet-ihr-schon-Threads gut, dieses raffinierte C++-Draft-nullptr-Ding kenn ich ja auch erst seit einem viertel Jahr. Wenn vorher mal jemand einfach so informiert hätte, wäre das schon lange in meinen Sourcen drin; und man kann ja nicht zu jedem und allem einen Artikel machen, kostet einfach zu viel Zeit.<br />
Apropos Zeit, wieso gehen deine Semesterferien schon zu Ende? Ich hab noch über 'nen halben Monat.. Und deine zweite Ausrede zählt auch nicht, eine Bachelor-/Master-/Diplom-/Sonstwas-Arbeit musst du sowieso irgendwann schreiben, da kannst du jedes bisschen vorheriger Übung gebrauchen <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="🙂"
    /> Oh, und so ein Artikel verschlingt ja auch keine Wochen sondern Stunden oder höchstens ein paar halbe Tage/Nächte <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>Dravere schrieb:</p>
<blockquote>
<p>Ich kannte das Wort tatsächlich nicht, habe es aber richtig interpretiert.</p>
</blockquote>
<p>Ich bin mir da nicht so sicher <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="😃"
    /> Ich kenne &quot;tangiert mich nicht&quot; als &quot;ist mir egal&quot;, was bei deinem Post nicht zu &quot;nur&quot; gepasst hat, hätte doch dann eher &quot;..<em>und</em> fand den Thread...&quot; heißen müssen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":-/"
      alt="😕"
    /> Aber ist auch wurst..</p>
<p>Dravere schrieb:</p>
<blockquote>
<p>Ich hatte schliesslich auch einmal Geometrie. Da weiss man was eine Tangente ist, daher konnte ich darauf schliessen, was es wohl bedeuten mag. <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>Jou, Mathematik im Alltag und lebensnah <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1581955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1581955</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sun, 14 Sep 2008 23:14:10 GMT</pubDate></item></channel></rss>