<?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[Über enum iterieren]]></title><description><![CDATA[<p>Ich bin auf der Suche nach einer guten Implementation um über alle Elemente eines enum-Typs zu iterieren.<br />
Beispiel 1:</p>
<pre><code class="language-cpp">enum Monate {Januar, Februar, Maerz, April, Mai};
for (Monate M = Januar; M &lt;= Mai;)
{
    printf(&quot;%d\n&quot;, Monat);    
    M = M + 1;
}
</code></pre>
<p>Der ++ Operator lässt sich ja leider nicht benutzen, da es sich um Konstanten handelt. Gibts da noch ne andere Möglichkeit?</p>
<p>Interessant wirds jetzt beim Beispiel 2:</p>
<pre><code class="language-cpp">enum Monate {Januar, Februar = 6, Maerz, April = 13, Mai};
</code></pre>
<p>Nun würde meine for-Schleife auch Werte liefern, die in meinem Typ Monate gar nicht auftauchen. Als Ergbnis erwarte ich sowas wie 0, 6, 7, 13, 14. Hat jemand ne Idee sowas am besten zu implementieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/171296/über-enum-iterieren</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 09:07:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/171296.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 24 Jan 2007 10:27:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Über enum iterieren on Wed, 24 Jan 2007 10:27:55 GMT]]></title><description><![CDATA[<p>Ich bin auf der Suche nach einer guten Implementation um über alle Elemente eines enum-Typs zu iterieren.<br />
Beispiel 1:</p>
<pre><code class="language-cpp">enum Monate {Januar, Februar, Maerz, April, Mai};
for (Monate M = Januar; M &lt;= Mai;)
{
    printf(&quot;%d\n&quot;, Monat);    
    M = M + 1;
}
</code></pre>
<p>Der ++ Operator lässt sich ja leider nicht benutzen, da es sich um Konstanten handelt. Gibts da noch ne andere Möglichkeit?</p>
<p>Interessant wirds jetzt beim Beispiel 2:</p>
<pre><code class="language-cpp">enum Monate {Januar, Februar = 6, Maerz, April = 13, Mai};
</code></pre>
<p>Nun würde meine for-Schleife auch Werte liefern, die in meinem Typ Monate gar nicht auftauchen. Als Ergbnis erwarte ich sowas wie 0, 6, 7, 13, 14. Hat jemand ne Idee sowas am besten zu implementieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1215817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1215817</guid><dc:creator><![CDATA[ZzetT]]></dc:creator><pubDate>Wed, 24 Jan 2007 10:27:55 GMT</pubDate></item><item><title><![CDATA[Reply to Über enum iterieren on Wed, 24 Jan 2007 10:34:52 GMT]]></title><description><![CDATA[<p>Theoretisch wäre op++ schon die richtige Lösung, aber der ist für &quot;normale&quot; enums nicht vorgesehen (bzw. orientiert sich nicht daran, welche enum-Werte tatsächlich verwendet werden). Aber afaik gelten enum's als benutzerdefinierte Typen, also könntest du dir den op++ selber überladen, so daß er in der von dir gewünschten Reihenfolge durch die Werte läuft.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1215819</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1215819</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 24 Jan 2007 10:34:52 GMT</pubDate></item><item><title><![CDATA[Reply to Über enum iterieren on Wed, 24 Jan 2007 10:47:45 GMT]]></title><description><![CDATA[<p>Dann müsste ich das ganze in einer Klasse kapseln. Ich wüßte dann aber immer noch nicht, wie ich das nächste Element bestimmen könnte, außer ich benutze keine enums.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1215830</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1215830</guid><dc:creator><![CDATA[ZzetT]]></dc:creator><pubDate>Wed, 24 Jan 2007 10:47:45 GMT</pubDate></item><item><title><![CDATA[Reply to Über enum iterieren on Wed, 24 Jan 2007 10:53:56 GMT]]></title><description><![CDATA[<p>ZzetT schrieb:</p>
<blockquote>
<p>Dann müsste ich das ganze in einer Klasse kapseln.</p>
</blockquote>
<p>Wieso? Du kannst Operatoren auch global definieren.</p>
<blockquote>
<p>Ich wüßte dann aber immer noch nicht, wie ich das nächste Element bestimmen könnte, außer ich benutze keine enums.</p>
</blockquote>
<p>Diese Zuordnung mußt du auch selber kennen und von Hand umsetzen (z.B. als switch-case-Zuordnung). Die &quot;normalen&quot; enum-Operatoren basieren üblicherweise auf einer impliziten Umwandlung nach int, so daß sie auch undefinierte Zwischenwerte zurückliefern können.</p>
<p>(und ich kenne nur eine Möglichkeit festzustellen, ob ein int im Wertebereich eines gegebenen enum's ist: Vergleich mit allen erlaubten enum-Konstanten)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1215834</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1215834</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 24 Jan 2007 10:53:56 GMT</pubDate></item><item><title><![CDATA[Reply to Über enum iterieren on Wed, 24 Jan 2007 12:42:39 GMT]]></title><description><![CDATA[<p>Hehe, das klappt sogar. Probleme gibt es allerdings, wenn der oberste Wert des enums eine Zweierpotenz - 1 ist, dann muss man sich etwas anderes ausdenken:</p>
<pre><code class="language-cpp">enum test {
    first = 1,
    second = 3,
    third = 7,
    fourth = 10
};

test&amp; operator++(test&amp; t)
{
    switch (t) {
        case first:    t = second; break;
        case second:   t = third; break;
        case third:    t = fourth; break;
        case fourth:   t = test(fourth + 1); break;
    }

    return t;
}

int main (int argc, char * const argv[])
{
    for (test i = first; i &lt;= fourth; ++i)
        cout &lt;&lt; i &lt;&lt; endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1215938</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1215938</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Wed, 24 Jan 2007 12:42:39 GMT</pubDate></item><item><title><![CDATA[Reply to Über enum iterieren on Wed, 24 Jan 2007 14:04:21 GMT]]></title><description><![CDATA[<p>Hab grad keinen Compiler zur Hand, aber das dürfte auch funktionieren:</p>
<pre><code class="language-cpp">for(Monate M = Januar, M &lt;= Mai, M=Monate(M+1))
</code></pre>
<p>Kein Plan, wie das aussieht wenn du da Sprünge zwischen den Werten hast ..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1216022</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1216022</guid><dc:creator><![CDATA[CsT]]></dc:creator><pubDate>Wed, 24 Jan 2007 14:04:21 GMT</pubDate></item></channel></rss>