<?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[Frage zu Pointer Array.]]></title><description><![CDATA[<p>hallo,<br />
ich schreibe gerade ein Program, aber finde sehr aufwendig, Pointer Array zuzuweisen.<br />
Das Problem ist wie folgendes:<br />
aus unterschiedlichen Versionen von Spec wurde solche Code von einem Tool automatisch generiert:</p>
<pre><code class="language-cpp">myclass FrameClass_0_1;
myclass FrameClass_0_2;
myclass FrameClass_0_3;
myclass FrameClass_0_4;
myclass FrameClass_0_5;
myclass FrameClass_0_6;
</code></pre>
<p>ich muss FrameClass_0_1 usw. zugreifen, um die Methode von myclass aufzurufen. Ich will nicht jedes abfragen, welche Index von FrameClass ich zugreifen möchte, sondern ich habe eine Pointer Array definiert. Mein Code sieht so aus:</p>
<pre><code class="language-cpp">class newclass {
    myclass *FrameClass_0[6];
    // constructor
    newclass::newclass()
    {
        FrameClass_0[0] = &amp;FrameClass_0_1;
        FrameClass_0[1] = &amp;FrameClass_0_2;
        FrameClass_0[2] = &amp;FrameClass_0_3;
        FrameClass_0[3] = &amp;FrameClass_0_4;
        FrameClass_0[4] = &amp;FrameClass_0_5;
        FrameClass_0[5] = &amp;FrameClass_0_6;
    }

    void newclass::myfunc(int i)
    {
        FrameClass_0[i]-&gt;method();
    }
}
</code></pre>
<p>Das funktioniert im moment gut. Aber ich finde, das ist nicht elegant, weil ich tansend von solchen Variablen habe, ich muss in Constructor soviele Code schreiben. Ich habe den Vorteil von automatische generierte Code verloren. Es ist sehr leicht einen Fehler zu machen.</p>
<p>Ich erwarte, ich kann alle Pointer Array Zuweisung in eine Loop einpacken.</p>
<pre><code class="language-cpp">for(int i=0; i&lt;6; ++i) {
        FrameClass_0[i] = &amp;FrameClass_0_/i/;
    }
</code></pre>
<p>aber das kann stimmt nicht funktionieren. Weiss jemand wie ich eleganter den Code schreiben kann?<br />
Mit C Makro kann ich leider nicht hinkriegen, weil Index 0-5 sind im Laufzeit erst erkennbar.</p>
<p>Vielen Dank für eure Hilfe vorab.</p>
<p>/Kenny</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/257996/frage-zu-pointer-array</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 13:31:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/257996.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 05 Jan 2010 15:52:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu Pointer Array. on Tue, 05 Jan 2010 15:52:01 GMT]]></title><description><![CDATA[<p>hallo,<br />
ich schreibe gerade ein Program, aber finde sehr aufwendig, Pointer Array zuzuweisen.<br />
Das Problem ist wie folgendes:<br />
aus unterschiedlichen Versionen von Spec wurde solche Code von einem Tool automatisch generiert:</p>
<pre><code class="language-cpp">myclass FrameClass_0_1;
myclass FrameClass_0_2;
myclass FrameClass_0_3;
myclass FrameClass_0_4;
myclass FrameClass_0_5;
myclass FrameClass_0_6;
</code></pre>
<p>ich muss FrameClass_0_1 usw. zugreifen, um die Methode von myclass aufzurufen. Ich will nicht jedes abfragen, welche Index von FrameClass ich zugreifen möchte, sondern ich habe eine Pointer Array definiert. Mein Code sieht so aus:</p>
<pre><code class="language-cpp">class newclass {
    myclass *FrameClass_0[6];
    // constructor
    newclass::newclass()
    {
        FrameClass_0[0] = &amp;FrameClass_0_1;
        FrameClass_0[1] = &amp;FrameClass_0_2;
        FrameClass_0[2] = &amp;FrameClass_0_3;
        FrameClass_0[3] = &amp;FrameClass_0_4;
        FrameClass_0[4] = &amp;FrameClass_0_5;
        FrameClass_0[5] = &amp;FrameClass_0_6;
    }

    void newclass::myfunc(int i)
    {
        FrameClass_0[i]-&gt;method();
    }
}
</code></pre>
<p>Das funktioniert im moment gut. Aber ich finde, das ist nicht elegant, weil ich tansend von solchen Variablen habe, ich muss in Constructor soviele Code schreiben. Ich habe den Vorteil von automatische generierte Code verloren. Es ist sehr leicht einen Fehler zu machen.</p>
<p>Ich erwarte, ich kann alle Pointer Array Zuweisung in eine Loop einpacken.</p>
<pre><code class="language-cpp">for(int i=0; i&lt;6; ++i) {
        FrameClass_0[i] = &amp;FrameClass_0_/i/;
    }
</code></pre>
<p>aber das kann stimmt nicht funktionieren. Weiss jemand wie ich eleganter den Code schreiben kann?<br />
Mit C Makro kann ich leider nicht hinkriegen, weil Index 0-5 sind im Laufzeit erst erkennbar.</p>
<p>Vielen Dank für eure Hilfe vorab.</p>
<p>/Kenny</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833044</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833044</guid><dc:creator><![CDATA[tjroamer]]></dc:creator><pubDate>Tue, 05 Jan 2010 15:52:01 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Pointer Array. on Tue, 05 Jan 2010 15:57:11 GMT]]></title><description><![CDATA[<p>Du kannst mit einem std::vector zumindest etwas mehr Sicherheit gewinnen.</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
typedef std::vector&lt;class myclass *&gt; ClassVec;

ClassVec vec;

class newclass {
    ClassVec vec;

    // constructor
    newclass::newclass()
    {
        vec.push_back(FrameClass_0_1);
        vec.push_back(FrameClass_0_2);
        vec.push_back(FrameClass_0_3);
        vec.push_back(FrameClass_0_4);
        vec.push_back(FrameClass_0_5);
        vec.push_back(FrameClass_0_6);
    }

    void newclass::myfunc(int i)
    {
        vec[i]-&gt;method();
    }
}
</code></pre>
<p>Aber mehr ist wohl nicht drinne...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833051</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833051</guid><dc:creator><![CDATA[ghjghjghj]]></dc:creator><pubDate>Tue, 05 Jan 2010 15:57:11 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Pointer Array. on Tue, 05 Jan 2010 15:58:05 GMT]]></title><description><![CDATA[<p>Zeile 4 ist natürlich überflüssig und gehört dort nicht hin, sry.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833052</guid><dc:creator><![CDATA[ghjghjghj]]></dc:creator><pubDate>Tue, 05 Jan 2010 15:58:05 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Pointer Array. on Tue, 05 Jan 2010 16:02:59 GMT]]></title><description><![CDATA[<p>ghjghjghj schrieb:</p>
<blockquote>
<p>Du kannst mit einem std::vector zumindest etwas mehr Sicherheit gewinnen.</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
typedef std::vector&lt;class myclass *&gt; ClassVec;

ClassVec vec;

class newclass {
    ClassVec vec;

    // constructor
    newclass::newclass()
    {
        vec.push_back(FrameClass_0_1);
        vec.push_back(FrameClass_0_2);
        vec.push_back(FrameClass_0_3);
        vec.push_back(FrameClass_0_4);
        vec.push_back(FrameClass_0_5);
        vec.push_back(FrameClass_0_6);
    }

    void newclass::myfunc(int i)
    {
        vec[i]-&gt;method();
    }
}
</code></pre>
<p>Aber mehr ist wohl nicht drinne...</p>
</blockquote>
<p>das ist richtig. Mit Vector kann man mehre Sicherheit gewinnen.<br />
Gibt es ein einfache Form um diese Code zuschreiben?<br />
Wie gesagt, habe ich tansende solchen Variablen. Ich muss ehe manuell alle push_back schreiben.<br />
Kann man mit Makro das vereinfachen?</p>
<p>/Kenny</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833060</guid><dc:creator><![CDATA[tjroamer]]></dc:creator><pubDate>Tue, 05 Jan 2010 16:02:59 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Pointer Array. on Tue, 05 Jan 2010 16:08:27 GMT]]></title><description><![CDATA[<p>tjroamer schrieb:</p>
<blockquote>
<p>ghjghjghj schrieb:</p>
<blockquote>
<p>Du kannst mit einem std::vector zumindest etwas mehr Sicherheit gewinnen.</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
typedef std::vector&lt;class myclass *&gt; ClassVec;

ClassVec vec;

class newclass {
    ClassVec vec;

    // constructor
    newclass::newclass()
    {
        vec.push_back(FrameClass_0_1);
        vec.push_back(FrameClass_0_2);
        vec.push_back(FrameClass_0_3);
        vec.push_back(FrameClass_0_4);
        vec.push_back(FrameClass_0_5);
        vec.push_back(FrameClass_0_6);
    }

    void newclass::myfunc(int i)
    {
        vec[i]-&gt;method();
    }
}
</code></pre>
<p>Aber mehr ist wohl nicht drinne...</p>
</blockquote>
<p>das ist richtig. Mit Vector kann man mehre Sicherheit gewinnen.<br />
Gibt es ein einfache Form um diese Code zuschreiben?<br />
Wie gesagt, habe ich tansende solchen Variablen. Ich muss ehe manuell alle push_back schreiben.<br />
Kann man mit Makro das vereinfachen?</p>
<p>/Kenny</p>
</blockquote>
<p>Nein, nicht wirklich. Ich habe jedenfalls keine Idee und es gibt leider keine Schleifen für Makros...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833062</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833062</guid><dc:creator><![CDATA[ghjghjghj]]></dc:creator><pubDate>Tue, 05 Jan 2010 16:08:27 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Pointer Array. on Tue, 05 Jan 2010 16:11:39 GMT]]></title><description><![CDATA[<p>ghjghjghj schrieb:</p>
<blockquote>
<p>Nein, nicht wirklich. Ich habe jedenfalls keine Idee und es gibt leider keine Schleifen für Makros...</p>
</blockquote>
<p>Mit Makros geht das schon, Boost Preprocessor bietet da so einiges vorgefertigtes. Ist auch recht leicht selbst zu schreiben, aber wozu das Rad neu erfinden?</p>
<p>Die wirkliche Frage ist aber natürlich, warum die FrameClass_0_X nicht schon in einem vector/array sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833070</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833070</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 05 Jan 2010 16:11:39 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Pointer Array. on Tue, 05 Jan 2010 16:22:52 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>ghjghjghj schrieb:</p>
<blockquote>
<p>Nein, nicht wirklich. Ich habe jedenfalls keine Idee und es gibt leider keine Schleifen für Makros...</p>
</blockquote>
<p>Mit Makros geht das schon, Boost Preprocessor bietet da so einiges vorgefertigtes. Ist auch recht leicht selbst zu schreiben, aber wozu das Rad neu erfinden?</p>
<p>Die wirkliche Frage ist aber natürlich, warum die FrameClass_0_X nicht schon in einem vector/array sind.</p>
</blockquote>
<p>wie nutzen ein Tool, das solche Code von eine Quelle automatisch generiert.<br />
Dies Tool kann aber keine Vector/Array generieren. Dies Tool wird generierte Code weiter verarbeiten, das kann ich leider nicht beeinflussen.</p>
<p>Wie sieht der Preprocessor in Boost aus?</p>
<p>Danke für den Hinweis.</p>
<p>/Kenny</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833079</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833079</guid><dc:creator><![CDATA[tjroamer]]></dc:creator><pubDate>Tue, 05 Jan 2010 16:22:52 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Pointer Array. on Tue, 05 Jan 2010 16:29:28 GMT]]></title><description><![CDATA[<p>Google nutzen ist schon schwer, was?</p>
<p>hier ein Beispiel:</p>
<pre><code class="language-cpp">#include &lt;boost/preprocessor/cat.hpp&gt;
#include &lt;boost/preprocessor/repetition/repeat_from_to.hpp&gt;

#define DECL(z, n, text) BOOST_PP_CAT(text, n) = n;

BOOST_PP_REPEAT_FROM_TO(5, 10, DECL, int x)
   /*
      expands to:
      int x5 = 5; int x6 = 6; int x7 = 7;
      int x8 = 8; int x9 = 9;
   */
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1833084</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833084</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 05 Jan 2010 16:29:28 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Pointer Array. on Tue, 05 Jan 2010 18:20:08 GMT]]></title><description><![CDATA[<p>Lustig. Man nimmt native C++-Codegeneratoren, um mit den Erzeugnissen externer Tools überhaupt etwas anfangen zu können. <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/1833177</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833177</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 05 Jan 2010 18:20:08 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Pointer Array. on Wed, 06 Jan 2010 06:55:02 GMT]]></title><description><![CDATA[<p>soweit habe ich erfolgreich mit BOOST_PP_REPEAT_... mein Code umgeschrieben.</p>
<pre><code class="language-cpp">#define DECLX_IF_1D(z, n, text) text.push_back(&amp;BOOST_PP_CAT(text, BOOST_PP_CAT(_, BOOST_PP_IF(n, B, A))));

BOOST_PP_REPEAT_FROM_TO(0, 2, DECLX_IF_1D, y)
// generiert: y.push_back(&amp;y_A); y.push_back(&amp;y_B);

#define DECLX_1D(z, n, text) text.push_back(&amp;BOOST_PP_CAT(text, BOOST_PP_CAT(_, n)));

BOOST_PP_REPEAT_FROM_TO(0, 2, DECLX_1D, x)
// generiert: x.push_back(&amp;x_0); x.push_back(&amp;x_1);
</code></pre>
<p>aber es fehlt mir noch einiges:<br />
ich habe folgende Variablen:</p>
<pre><code class="language-cpp">mybfclass x_0_mybf;
mybfclass x_1_mybf;
...
mybfclass1 x_0_mybf1;
mybfclass1 x_1_mybf1;
...
mybfclass2 x_0_mybf2;
mybfclass2 x_1_mybf2;
...

// ich habe eine Vector definiert
vector&lt;mybfclass*&gt; x_mybf;
vector&lt;mybfclass1*&gt; x_mybf1;
vector&lt;mybfclass2*&gt; x_mybf2;
</code></pre>
<p>um x_mybf zu befüllen, muss ich noch ein zusätzliches Makro definieren</p>
<pre><code class="language-cpp">#define DECLX_mybf(z, n, text) BOOST_PP_CAT(text, BOOST_PP_CAT(_, mybf)).push_back(&amp;BOOST_PP_CAT(text, BOOST_PP_CAT(BOOST_PP_CAT(_, n), BOOST_PP_CAT(_, mybf))));

BOOST_PP_REPEAT_FROM_TO(0, 2, DECLX_mybf, x);
// generiert: x_mybf.push_back(&amp;x_0_mybf); x_mybf.push_back(&amp;x_1_mybf);
</code></pre>
<p>dann muss ich noch DECLX_mybf1 und DECL_mybf2 definieren.</p>
<p>ich habe ziemlich viele solche Variablen. Ich muss noch viele Makros definieren, um zu automatisieren. Weil inne Makro DECLX_mybf von BOOST_PP_REPORT_FROM_TO nur ein Argument (x) akzeptieren kann.</p>
<p>trotzdem hat dies Makro mir sehr viel geholfen.</p>
<p>Vielen Dank für den Vorschlag.</p>
<p>/Kenny</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833429</guid><dc:creator><![CDATA[tjroamer]]></dc:creator><pubDate>Wed, 06 Jan 2010 06:55:02 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Pointer Array. on Wed, 06 Jan 2010 10:25:25 GMT]]></title><description><![CDATA[<p>Boost Preprocessor kennt auch Argumentenlisten. Da brauchst du dann nur ein Makro für alle Variablen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833496</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833496</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 06 Jan 2010 10:25:25 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Pointer Array. on Wed, 06 Jan 2010 12:12:45 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Boost Preprocessor kennt auch Argumentenlisten. Da brauchst du dann nur ein Makro für alle Variablen.</p>
</blockquote>
<p>ich kenne Boost preprocessor leider nicht so gut. Ich habe das Makro geschaut, leider konnte ich kein passendes Makro für</p>
<pre><code class="language-cpp">#define DECLX_mybf(z, n, text) BOOST_PP_CAT(text, BOOST_PP_CAT(_, mybf)).push_back(&amp;BOOST_PP_CAT(text, BOOST_PP_CAT(BOOST_PP_CAT(_, n), BOOST_PP_CAT(_, mybf))));

BOOST_PP_REPEAT_FROM_TO(0, 2, DECLX_mybf, x);
// generiert: x_mybf.push_back(&amp;x_0_mybf); x_mybf.push_back(&amp;x_1_mybf);
</code></pre>
<p>finden. <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>
<p>Kannst du mehren Hinweis mir geben?</p>
<p>Danke.</p>
<p>Viele Grüße,</p>
<p>/Kenny</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833573</guid><dc:creator><![CDATA[tjroamer]]></dc:creator><pubDate>Wed, 06 Jan 2010 12:12:45 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Pointer Array. on Wed, 06 Jan 2010 12:17:29 GMT]]></title><description><![CDATA[<p>sowohl</p>
<pre><code class="language-cpp">BOOST_PP_REPEAT(count, macro, data)
</code></pre>
<p>als auch</p>
<pre><code class="language-cpp">BOOST_PP_REPEAT_FROM_TO(first, last, macro, data)
</code></pre>
<p>können nur ein Makroform</p>
<pre><code class="language-cpp">macro(z, n, data)
</code></pre>
<p>akzeptieren.</p>
<p>Welche Makro kann ich nutzen, um mehr als ein Argument zu geben?</p>
<p>Danke.</p>
<p>/Kenny</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833578</guid><dc:creator><![CDATA[tjroamer]]></dc:creator><pubDate>Wed, 06 Jan 2010 12:17:29 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Pointer Array. on Wed, 06 Jan 2010 19:18:01 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">mybfclass x_0_mybf;
mybfclass x_1_mybf;
...
mybfclass1 x_0_mybf1;
mybfclass1 x_1_mybf1;
...
mybfclass2 x_0_mybf2;
mybfclass2 x_1_mybf2;
...
</code></pre>
<p>Für sowas kannst du die Makros verschachteln. Ähnlich wie bei einer doppelten Schleife gehst du zuerst den einen Index durch, dann den anderen.</p>
<p>Für den Spezialfall, dass beim Index 0 keine Null steht, sondern nichts, kannst du dir sowas einrichten:</p>
<pre><code class="language-cpp">#define NUMBER(N) BOOST_PP_IF(BOOST_PP_EQUAL(N, 0), , N)
#define DECL(Z, N, DATA) BOOST_PP_CAT(Decl, NUMBER(N))

int main()
{
	BOOST_PP_REPEAT(4, DECL, )
}
</code></pre>
<p>Expandiert zu:</p>
<pre><code class="language-cpp">int main()
{
	Decl Decl1 Decl2 Decl3
}
</code></pre>
<p>Man hat eigentlich nicht wenige Möglichkeiten zur Präprozessor-Metaprogrammierung. <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/1833913</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833913</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 06 Jan 2010 19:18:01 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Pointer Array. on Wed, 06 Jan 2010 20:13:00 GMT]]></title><description><![CDATA[<p>Mit der Argumentenliste meinte ich, dass man eine Liste als ein Argument geben kann. Oder eine Sequence, weil die einfacher zu handhaben sind. Und die Sequence lässt man dann vom eigentlichen Makro wieder in die einzelnen Argumente zerpflücken. Funktioniert ziemlich gut.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>: Das Verschachteln von Schleifen geht (zumindest bei boost) oftmals nicht. Zumindest wenn man den gleichen Schleifentyp im Inneren und im Äußeren benutzt. Dann muss man stattdessen beispielsweise eine for-Schleife innerhalb einer while-Schleife machen. Das funktioniert dann aber ganz ausgezeichnet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833935</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 06 Jan 2010 20:13:00 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Pointer Array. on Wed, 06 Jan 2010 21:05:59 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Mit der Argumentenliste meinte ich, dass man eine Liste als ein Argument geben kann. Oder eine Sequence, weil die einfacher zu handhaben sind. Und die Sequence lässt man dann vom eigentlichen Makro wieder in die einzelnen Argumente zerpflücken. Funktioniert ziemlich gut.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>: Das Verschachteln von Schleifen geht (zumindest bei boost) oftmals nicht. Zumindest wenn man den gleichen Schleifentyp im Inneren und im Äußeren benutzt. Dann muss man stattdessen beispielsweise eine for-Schleife innerhalb einer while-Schleife machen. Das funktioniert dann aber ganz ausgezeichnet.</p>
</blockquote>
<p>ich habe folgendes Makro mit Argumentlistmethode geschrieben, und es hat gut funktioniert:</p>
<pre><code class="language-cpp">#define DECLX_BF(z, n, text) BOOST_PP_CAT(BOOST_PP_LIST_AT(text, 0), BOOST_PP_CAT(_, BOOST_PP_LIST_AT(text, 1))).push_back(\
&amp;BOOST_PP_CAT(BOOST_PP_LIST_AT(text, 0), BOOST_PP_CAT(_, BOOST_PP_CAT(n, BOOST_PP_CAT(_, BOOST_PP_LIST_AT(text, 1))))));

// user code
BOOST_PP_REPEAT_FROM_TO(0, 2, DECLX_BF, (x, (mybf, BOOST_PP_NIL)));
BOOST_PP_REPEAT_FROM_TO(0, 2, DECLX_BF, (x, (mybf1, BOOST_PP_NIL)));
BOOST_PP_REPEAT_FROM_TO(0, 2, DECLX_BF, (x, (mybf2, BOOST_PP_NIL)));
// generiert: x_mybf.push_back(&amp;x_0_mybf); x_mybf.push_back(&amp;x_1_mybf); 
// und x_mybf1.push_back(&amp;x_0_mybf1); x_mybf1.push_back(&amp;x_1_mybf1);
// und x_mybf2.push_back(&amp;x_0_mybf2); x_mybf2.push_back(&amp;x_1_mybf2);
</code></pre>
<p>jetzt bekämpfe ich eine 2-dimensionale Array</p>
<p>reg1[0][0] = &amp;reg1_IFA_0;<br />
reg1[0][1] = &amp;reg1_IFA_1;<br />
reg1[0][2] = &amp;reg1_IFA_2;<br />
...<br />
reg1[1][0] = &amp;reg1_IFB_0;<br />
reg1[1][1] = &amp;reg1_IFB_1;<br />
reg1[1][2] = &amp;reg1_IFB_2;<br />
...<br />
ich denke, es sollte leichte gemacht werden kann. Ich werde meine Lösung nochmal zum Review posten.</p>
<p>vielen Dank für deinen Hinweis.</p>
<p>/Kenny</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833977</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833977</guid><dc:creator><![CDATA[tjroamer]]></dc:creator><pubDate>Wed, 06 Jan 2010 21:05:59 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Pointer Array. on Wed, 06 Jan 2010 21:25:23 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>: Das Verschachteln von Schleifen geht (zumindest bei boost) oftmals nicht. Zumindest wenn man den gleichen Schleifentyp im Inneren und im Äußeren benutzt. Dann muss man stattdessen beispielsweise eine for-Schleife innerhalb einer while-Schleife machen. Das funktioniert dann aber ganz ausgezeichnet.</p>
</blockquote>
<p>Hm. Also mit dem folgenden Code habe ich keine Probleme:</p>
<pre><code class="language-cpp">#include &lt;boost/preprocessor/repetition.hpp&gt;
#include &lt;iostream&gt;

#define INNER(Z, INNER_VAR, OUTER_VAR) std::cout &lt;&lt; OUTER_VAR &lt;&lt; &quot; &quot; &lt;&lt; INNER_VAR &lt;&lt; std::endl;
#define OUTER(Z, OUTER_VAR, INNER_MAX) BOOST_PP_REPEAT(INNER_MAX, INNER, OUTER_VAR)

#define CASCADED(OUTER_MAX, INNER_MAX) BOOST_PP_REPEAT(OUTER_MAX, OUTER, INNER_MAX)

int main()
{
	CASCADED(5, 3)
}
</code></pre>
<p>Ich weiss nicht, ob du vielleicht das meinst, aber die Boost-Präprozessormagier schreiben auf ihrer Seite zu <code>BOOST_PP_REPEAT_z</code> :</p>
<p>&lt;a href= schrieb:</p>
<blockquote>
<p>BOOST_PP_REPEAT Dokumentation&quot;&gt;Previously, this macro could not be used recursively inside BOOST_PP_REPEAT. This limitation no longer exists, as the library can automatically detect the next available repetition depth.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1833982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833982</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 06 Jan 2010 21:25:23 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Pointer Array. on Wed, 06 Jan 2010 21:43:32 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Ich weiss nicht, ob du vielleicht das meinst, aber die Boost-Präprozessormagier schreiben auf ihrer Seite zu <code>BOOST_PP_REPEAT_z</code> :</p>
<p>&lt;a href= schrieb:</p>
<blockquote>
<p>BOOST_PP_REPEAT Dokumentation&quot;&gt;Previously, this macro could not be used recursively inside BOOST_PP_REPEAT. This limitation no longer exists, as the library can automatically detect the next available repetition depth.</p>
</blockquote>
</blockquote>
<p>Ja, ist ein schon Weilchen her, dass ich das festgestellt hatte. Gut zu wissen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833988</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833988</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 06 Jan 2010 21:43:32 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Pointer Array. on Wed, 06 Jan 2010 21:48:45 GMT]]></title><description><![CDATA[<p>habe endlich das Problem mit Argumentlist gelöst:</p>
<p>ich habe folgendes geschrieben:</p>
<pre><code class="language-cpp">#define DECLX_1D(z, n, text) BOOST_PP_LIST_AT(text, 1)[BOOST_PP_LIST_AT(text, 0)][n] = \
&amp;BOOST_PP_CAT(BOOST_PP_LIST_AT(text, 1), BOOST_PP_CAT(_, BOOST_PP_CAT(BOOST_PP_LIST_AT(text, 0), BOOST_PP_CAT(_, n))));
#define DECLX_REG_2D(z, n, text) BOOST_PP_REPEAT_FROM_TO(0, BOOST_PP_LIST_AT(text, 0), DECLX_1D, (n, (BOOST_PP_LIST_AT(text, 1), BOOST_PP_NIL)));

int reg_0_0 = 12;
int reg_0_1 = 13;
int reg_1_0 = 14;
int reg_1_1 = 15;

int *reg[2][2];

BOOST_PP_REPEAT_FROM_TO(0, 2, DECLX_REG_2D, (2, (reg, BOOST_PP_NIL)));

// generiert: reg[0][0] = &amp;reg_0_0; reg[0][1] = &amp;reg_0_1;
// reg[1][0] = &amp;reg_1_0; reg[1][1] = &amp;reg_1_1;
</code></pre>
<p>das Makro siehst einbisschen kompliziert aus, oder?</p>
<p><strong>Nexus:</strong> mit deiner Methode werde ich mal probieren. _z Version sieht aus erstem Blick gut aus.</p>
<p>Danke für eure Hilfe, ich denke, ich kann meine Codemenge sehr stark reduzieren, und gleichzeitlich kann ich jetzt besser das Code verwalten.</p>
<p>/Kenny</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833994</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833994</guid><dc:creator><![CDATA[tjroamer]]></dc:creator><pubDate>Wed, 06 Jan 2010 21:48:45 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Pointer Array. on Wed, 06 Jan 2010 21:53:37 GMT]]></title><description><![CDATA[<p>tjroamer schrieb:</p>
<blockquote>
<p>das Makro siehst einbisschen kompliziert aus, oder?</p>
</blockquote>
<p>Ja, aus meiner Erfahrung ist das bei der Präprozessormetaprogrammierung immer so. Aber solch ein Makro schreibt man einmal und versteckt es dann irgendwo in einem Header und dann sieht alles wieder ordentlich aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1833997</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1833997</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 06 Jan 2010 21:53:37 GMT</pubDate></item></channel></rss>