<?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[Enums in Namespaces verpacken?]]></title><description><![CDATA[<p>Hallo.</p>
<p>Ich habe mich jetzt schon öfter über das verhalten von enums bei c++ gewundert und ich habe immer noch keine besonders gute Lösung gefunden...<br />
Anmerkung zu allen folgenden Beispielen: Ich habe die Beispiele gerade nicht getestet, sondern aus dem Gedächtnis rezitiert, es kann also auch sein, dass ich was falsch in Erinnerung habe.</p>
<p>Wie ich es haben will ist eigentlich wie es in java ist, soll heißen, die Elemente im enum kann man nicht direkt benutzen, ohne :: (oder . bei java), so das auch keine namenskonflikte entstehen und gleichzeitig soll man den namen der enum auch als typ (rückgabe, parameter, variable) benutzen können.</p>
<p>So dann gibts da ja verschiedene Ansätze:</p>
<pre><code class="language-cpp">enum Farbe {Rot, Gruen, Blau};
</code></pre>
<p>Problem: folgendes geht:</p>
<pre><code class="language-cpp">Farbe f = Rot;
</code></pre>
<p>Und was noch viel schlimmer ist, dabei können namenskonflikte entstehen.</p>
<p>Ich will dass das nur geht, wenn man folgendes macht:</p>
<pre><code class="language-cpp">Farbe f = Farbe::Rot;
</code></pre>
<p>Meine Lösung: namespace</p>
<pre><code class="language-cpp">namespace Farbe
{
    enum Farbe {Rot, Gruen, Blau};
}
</code></pre>
<p>Anwendung:</p>
<pre><code class="language-cpp">Farbe::Farbe f = Farbe::Rot;
</code></pre>
<p>Da stört mich, dass man beim Typ Farbe :: davorschreiben muss....</p>
<p>Dann nächste Idee:</p>
<pre><code class="language-cpp">using namespace Farbe;
</code></pre>
<p>Problem: Farbe ist sowohl namespace als auch enum name also uneindeutig und compilerfehler.</p>
<p>Lösung wäre, den namespace anders als die enum zu nennen, aber ich hab auch keine lust mir jedes mal nen alternativen namen auszudenken...</p>
<p>Und wenn using namespace drin ist kann man soweit ich weiß auch wieder</p>
<pre><code class="language-cpp">Farbe f = Rot;
</code></pre>
<p>machen, was ich ja nicht wollte...<br />
Das ist zwar nicht so schlimm, aber dann muss man sich trotzdem nen neuen namen ausdenken und immer using namespace machen.</p>
<p>Was also tun?<br />
Wie handhabt ihr das?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/286933/enums-in-namespaces-verpacken</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 16:29:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/286933.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 18 May 2011 20:20:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Enums in Namespaces verpacken? on Wed, 18 May 2011 20:20:28 GMT]]></title><description><![CDATA[<p>Hallo.</p>
<p>Ich habe mich jetzt schon öfter über das verhalten von enums bei c++ gewundert und ich habe immer noch keine besonders gute Lösung gefunden...<br />
Anmerkung zu allen folgenden Beispielen: Ich habe die Beispiele gerade nicht getestet, sondern aus dem Gedächtnis rezitiert, es kann also auch sein, dass ich was falsch in Erinnerung habe.</p>
<p>Wie ich es haben will ist eigentlich wie es in java ist, soll heißen, die Elemente im enum kann man nicht direkt benutzen, ohne :: (oder . bei java), so das auch keine namenskonflikte entstehen und gleichzeitig soll man den namen der enum auch als typ (rückgabe, parameter, variable) benutzen können.</p>
<p>So dann gibts da ja verschiedene Ansätze:</p>
<pre><code class="language-cpp">enum Farbe {Rot, Gruen, Blau};
</code></pre>
<p>Problem: folgendes geht:</p>
<pre><code class="language-cpp">Farbe f = Rot;
</code></pre>
<p>Und was noch viel schlimmer ist, dabei können namenskonflikte entstehen.</p>
<p>Ich will dass das nur geht, wenn man folgendes macht:</p>
<pre><code class="language-cpp">Farbe f = Farbe::Rot;
</code></pre>
<p>Meine Lösung: namespace</p>
<pre><code class="language-cpp">namespace Farbe
{
    enum Farbe {Rot, Gruen, Blau};
}
</code></pre>
<p>Anwendung:</p>
<pre><code class="language-cpp">Farbe::Farbe f = Farbe::Rot;
</code></pre>
<p>Da stört mich, dass man beim Typ Farbe :: davorschreiben muss....</p>
<p>Dann nächste Idee:</p>
<pre><code class="language-cpp">using namespace Farbe;
</code></pre>
<p>Problem: Farbe ist sowohl namespace als auch enum name also uneindeutig und compilerfehler.</p>
<p>Lösung wäre, den namespace anders als die enum zu nennen, aber ich hab auch keine lust mir jedes mal nen alternativen namen auszudenken...</p>
<p>Und wenn using namespace drin ist kann man soweit ich weiß auch wieder</p>
<pre><code class="language-cpp">Farbe f = Rot;
</code></pre>
<p>machen, was ich ja nicht wollte...<br />
Das ist zwar nicht so schlimm, aber dann muss man sich trotzdem nen neuen namen ausdenken und immer using namespace machen.</p>
<p>Was also tun?<br />
Wie handhabt ihr das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2065530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2065530</guid><dc:creator><![CDATA[MrEnum]]></dc:creator><pubDate>Wed, 18 May 2011 20:20:28 GMT</pubDate></item><item><title><![CDATA[Reply to Enums in Namespaces verpacken? on Wed, 18 May 2011 21:43:37 GMT]]></title><description><![CDATA[<p>Ich benutze enum class aus C++0x.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2065562</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2065562</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 18 May 2011 21:43:37 GMT</pubDate></item><item><title><![CDATA[Reply to Enums in Namespaces verpacken? on Thu, 19 May 2011 06:54:43 GMT]]></title><description><![CDATA[<p>Ich nehme meist statt dem namespace ein struct. Wenn das enum zu einer Klasse gehört dann kommt es eben da mit rein.</p>
<p>MrEnum schrieb:</p>
<blockquote>
<p>Da stört mich, dass man beim Typ Farbe :: davorschreiben muss....</p>
</blockquote>
<p>Das finde ich eher einen Vorteil. Das bischen mehr Schreibarbeit erzeugt für mich mehr Übersicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2065626</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2065626</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 19 May 2011 06:54:43 GMT</pubDate></item><item><title><![CDATA[Reply to Enums in Namespaces verpacken? on Thu, 19 May 2011 08:05:57 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>MrEnum schrieb:</p>
<blockquote>
<p>Da stört mich, dass man beim Typ Farbe :: davorschreiben muss....</p>
</blockquote>
<p>Das finde ich eher einen Vorteil. Das bischen mehr Schreibarbeit erzeugt für mich mehr Übersicht.</p>
</blockquote>
<p>Ich glaube er meint das doppelte Farbe::Farbe:</p>
<pre><code class="language-cpp">Farbe::Farbe f = Farbe::Rot;
</code></pre>
<p>Er möchte lieber:</p>
<pre><code class="language-cpp">Farbe f = Farbe::Rot;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2065659</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2065659</guid><dc:creator><![CDATA[Roger Wilco]]></dc:creator><pubDate>Thu, 19 May 2011 08:05:57 GMT</pubDate></item><item><title><![CDATA[Reply to Enums in Namespaces verpacken? on Thu, 19 May 2011 09:37:17 GMT]]></title><description><![CDATA[<p>Mir ist schon klar, das er das meint. Ich sehe aber auch da kein Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2065735</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2065735</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 19 May 2011 09:37:17 GMT</pubDate></item><item><title><![CDATA[Reply to Enums in Namespaces verpacken? on Thu, 19 May 2011 09:46:11 GMT]]></title><description><![CDATA[<p>Ich hätte da mal eine Idee, aber ich hab's nicht ausprobiert: Man kann doch einzelne Sachen aus Namespaces bekannt machen. Könnte man dann nicht sowas schreiben:</p>
<pre><code class="language-cpp">namespace Farbe
{
    enum Farbe { Rot, Gruen, Blau };
}
</code></pre>
<p>Und dann nur</p>
<pre><code class="language-cpp">using Farbe::Farbe;
</code></pre>
<p>So dass man Farbe als Typ schreiben kann, ohne Farbe::Farbe schreiben zu müssen. Aber der Rest geht weiterhin nur über den Namespacenamen.</p>
<p>Alternative: Nicht gerade elegant, aber zweckmäßig:</p>
<pre><code class="language-cpp">enum Farbe { Farbe_Rot, Farbe_Gruen, Farbe_Blau };
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2065743</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2065743</guid><dc:creator><![CDATA[Bess0r?]]></dc:creator><pubDate>Thu, 19 May 2011 09:46:11 GMT</pubDate></item><item><title><![CDATA[Reply to Enums in Namespaces verpacken? on Thu, 19 May 2011 10:56:34 GMT]]></title><description><![CDATA[<p>Ich mach das meistens so:</p>
<pre><code class="language-cpp">struct color_id
{
	enum Enum
	{
		Red,
		Green,
		Blue
	};
};

typedef color_id::Enum ColorId;

ColorId i = color_id::Red;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2065768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2065768</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Thu, 19 May 2011 10:56:34 GMT</pubDate></item></channel></rss>