<?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[Grösse von enums]]></title><description><![CDATA[<p>Hi leute</p>
<p>geht sowas?</p>
<pre><code class="language-cpp">enum foo
{
   eins, zwei, drei
};

int main()
{
     cout &lt;&lt; sizeof(foo) / sizeof(int) &lt;&lt; endl;   // dass jetzt 3 rauskommen würde
}
</code></pre>
<p>also sprich dass man ohne andere konstanten zu definieren, die länge des enums quasi rauskriegen kann?<br />
sizeof(enum) ist meines wissens == sizeof(int), und das beispiel oben klappt auch nicht, jedenfalls nicht so wie ichs gern hätte</p>
<p>gibt es da sosnt eine möglichkeit?</p>
<p>mfg mosho</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/271446/grösse-von-enums</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 11:19:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/271446.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 28 Jul 2010 12:31:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Grösse von enums on Wed, 28 Jul 2010 12:31:10 GMT]]></title><description><![CDATA[<p>Hi leute</p>
<p>geht sowas?</p>
<pre><code class="language-cpp">enum foo
{
   eins, zwei, drei
};

int main()
{
     cout &lt;&lt; sizeof(foo) / sizeof(int) &lt;&lt; endl;   // dass jetzt 3 rauskommen würde
}
</code></pre>
<p>also sprich dass man ohne andere konstanten zu definieren, die länge des enums quasi rauskriegen kann?<br />
sizeof(enum) ist meines wissens == sizeof(int), und das beispiel oben klappt auch nicht, jedenfalls nicht so wie ichs gern hätte</p>
<p>gibt es da sosnt eine möglichkeit?</p>
<p>mfg mosho</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1933085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1933085</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 28 Jul 2010 12:31:10 GMT</pubDate></item><item><title><![CDATA[Reply to Grösse von enums on Wed, 28 Jul 2010 12:43:01 GMT]]></title><description><![CDATA[<p>Kommt da nicht 1 raus, da ein enum eine Aufzählung = Integer mit den Werten 1... ist?</p>
<p>Edit: Ach jetzt verstehe ich Deine Frage erst bzw. ich verstehe sie nicht... was möchtest Du denn erreichen?</p>
<p>Ein enum ist eine Variable (int), dessen Werte man einfach Symbole &quot;Eins&quot;, &quot;Zwei&quot;,... zuordnen kann und den Wertebereich einschränken kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1933092</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1933092</guid><dc:creator><![CDATA[Roger Wilco]]></dc:creator><pubDate>Wed, 28 Jul 2010 12:43:01 GMT</pubDate></item><item><title><![CDATA[Reply to Grösse von enums on Wed, 28 Jul 2010 12:40:28 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>gibt es da sosnt eine möglichkeit?</p>
</blockquote>
<p>Nein</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1933093</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1933093</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Wed, 28 Jul 2010 12:40:28 GMT</pubDate></item><item><title><![CDATA[Reply to Grösse von enums on Wed, 28 Jul 2010 12:45:59 GMT]]></title><description><![CDATA[<p>Ja, gibt es:</p>
<pre><code>enum Blup
{
  B_INVALID = -1,

  B_mein_erstes,
  B_mein_zweites,
  B_mein_drittes,

  B_LAST
};
</code></pre>
<p>Wenn man sich das angewöhnt hat man mit dem _LAST-Eintrag immer die Anzahl, kann auch wunderbar drüber iterieren etc. Vorausgesetzt natürlich das mit Invalid ist der einzige zugewiesene Eintrag.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1933097</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1933097</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Wed, 28 Jul 2010 12:45:59 GMT</pubDate></item><item><title><![CDATA[Reply to Grösse von enums on Wed, 28 Jul 2010 12:59:49 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>ohne andere konstanten zu definieren</p>
</blockquote>
<p>Das geht nicht. Du musst da zu was Dynamischerem als <code>enum</code> greifen, bei dem du Laufzeitinformationen hast. <code>std::map&lt;const char*, int&gt;</code> beispielsweise.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1933104</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1933104</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 28 Jul 2010 12:59:49 GMT</pubDate></item><item><title><![CDATA[Reply to Grösse von enums on Wed, 28 Jul 2010 14:04:19 GMT]]></title><description><![CDATA[<p>ne bruachs ja nur zur kompilezeit</p>
<p>geht drum ich möchte folgendes machen:</p>
<pre><code class="language-cpp">string str[anzahl_der_dinger_im_enum];

enum
{
    eins,
    zwei,
    drei,
    ...
};
</code></pre>
<p>wenn ich jetzt noch die vier ins enum schriebe hätte ichg erne dass das array dann auch eins grösser wird...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1933149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1933149</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 28 Jul 2010 14:04:19 GMT</pubDate></item><item><title><![CDATA[Reply to Grösse von enums on Wed, 28 Jul 2010 14:24:25 GMT]]></title><description><![CDATA[<p>Fellhuhn hat die Lösung doch schon gepostet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1933155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1933155</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Wed, 28 Jul 2010 14:24:25 GMT</pubDate></item><item><title><![CDATA[Reply to Grösse von enums on Wed, 28 Jul 2010 14:28:29 GMT]]></title><description><![CDATA[<p>aber sowas wie ich mir dachte (dieser sizeof kram) gibts nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1933156</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1933156</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 28 Jul 2010 14:28:29 GMT</pubDate></item><item><title><![CDATA[Reply to Grösse von enums on Wed, 28 Jul 2010 14:39:10 GMT]]></title><description><![CDATA[<p>TyRoXx schrieb:</p>
<blockquote>
<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>gibt es da sosnt eine möglichkeit?</p>
</blockquote>
<p>Nein</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1933162</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1933162</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Wed, 28 Jul 2010 14:39:10 GMT</pubDate></item><item><title><![CDATA[Reply to Grösse von enums on Thu, 29 Jul 2010 06:09:30 GMT]]></title><description><![CDATA[<p>Aber wenn du einen _LAST-Wert mitaufnimmst,<br />
wird dieser ja sowieso angepasst ....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1933384</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1933384</guid><dc:creator><![CDATA[Tipp]]></dc:creator><pubDate>Thu, 29 Jul 2010 06:09:30 GMT</pubDate></item><item><title><![CDATA[Reply to Grösse von enums on Thu, 29 Jul 2010 09:19:20 GMT]]></title><description><![CDATA[<p>Zur Not lässt sich mit Makros eine Art Operator für die <code>enum</code> -Größe zusammenkloppen:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;cassert&gt;
using namespace std;

#define ENUM_WITH_COUNT(name) struct name { enum Id {
#define ENUM_END ,Count_Of_Ids }; };
#define enum_size(name) name::Count_Of_Ids

ENUM_WITH_COUNT(WindowType)
	Button,
	Window,
	Checkbox
ENUM_END

int main()
{
	const size_t size = enum_size(WindowType);
	assert(size == 3);
	cout &lt;&lt; size &lt;&lt; endl;

	//Positiver Nebeneffekt:
	WindowType::Id id = WindowType::Button;

	cin.get();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1933450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1933450</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Thu, 29 Jul 2010 09:19:20 GMT</pubDate></item><item><title><![CDATA[Reply to Grösse von enums on Fri, 30 Jul 2010 11:03:33 GMT]]></title><description><![CDATA[<p>-.- stimmt mit dem _LAST eitnrag gehts ganz gut<br />
kA wieso ich das die ganze zeit überlesen hab, sorry jungs</p>
<p>die idee mit Macros find ich auch cool dazu auch ne frage</p>
<p>wieso das struct<br />
das würde ja dann so aussehen</p>
<pre><code class="language-cpp">struct ENUMNAME
{
    enum Id
    {
         bla,
         bla2,
         counts_of_ids,
    };
};
</code></pre>
<p>eig bringt das sdoch nichts?<br />
ausser halt dass man immer nen anderen namen verwenden kann, aber wenn man das struct weglässt kann man doch auch andere namen verwenden...</p>
<p>zu enums noch<br />
wenn ich die enum einträge selbst mit zahlen versehe, dann wird der nächste eintrag ohne explizite zahl um eins einfach erhört?!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1933959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1933959</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Fri, 30 Jul 2010 11:03:33 GMT</pubDate></item><item><title><![CDATA[Reply to Grösse von enums on Fri, 30 Jul 2010 13:04:43 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>die idee mit Macros find ich auch cool dazu auch ne frage</p>
</blockquote>
<p>Da würd ich vorsichtig sein. Nur um einen <code>Last</code> -Enumerator nicht hinzuschreiben das Ganze <code>enum</code> zu obfuscaten lohnt sich vielleicht nicht. Vor allem wenn andere den Code lesen (oder du nach einiger Zeit), kommen vielleicht Fragen und Unklarheiten auf.</p>
<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>wieso das struct</p>
</blockquote>
<p>Damit du qualifizierte Bezeichner hast: Statt</p>
<pre><code class="language-cpp">Color a = Green;
</code></pre>
<p>nimmst du</p>
<pre><code class="language-cpp">Color::Type a = Color::Green;
</code></pre>
<p>Damit verhinderst du auch Namenskonflikte.</p>
<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>zu enums noch<br />
wenn ich die enum einträge selbst mit zahlen versehe, dann wird der nächste eintrag ohne explizite zahl um eins einfach erhört?!?</p>
</blockquote>
<p>Ja. Jeder Enumerator hat den Wert des Vorgängers + 1, wenn nichts angegeben wird. Der erste Enumerator entspräche dann dem Wert 0.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934030</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934030</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 30 Jul 2010 13:04:43 GMT</pubDate></item><item><title><![CDATA[Reply to Grösse von enums on Fri, 30 Jul 2010 20:43:12 GMT]]></title><description><![CDATA[<p>Ich schlag einfach mal Metaprogrammierung vor, weil ich die<br />
Idee eigentlich gar nicht sooo schlecht finde:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;

template&lt;typename T&gt;
int enumSize(const T&amp; t){
        throw &quot;size not available for enum&quot;;
}

enum foo
{
   eins, zwei, drei
};

template&lt;&gt;
int enumSize(const foo&amp; t){
        return 3;
}

enum bar
{
   rot, blau
};

template&lt;&gt;
int enumSize(const bar&amp; t){
        return 2;
}

int main() {
        std::cout &lt;&lt; enumSize(eins) &lt;&lt; std::endl;
        std::cout &lt;&lt; enumSize(rot) &lt;&lt; std::endl;
        return 0;
}
</code></pre>
<p>Ausgabe:</p>
<pre><code>3
2
</code></pre>
<p>Gruß,<br />
XSpille</p>
<p>EDIT: Kann ich eigentlich irgendwie einen aussagekräftigen Compiler-Fehler erzwingen statt des Werfen einer Exception?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934236</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Fri, 30 Jul 2010 20:43:12 GMT</pubDate></item><item><title><![CDATA[Reply to Grösse von enums on Fri, 30 Jul 2010 20:51:36 GMT]]></title><description><![CDATA[<p>#error Ganz böser schlimmer Fehler!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934241</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934241</guid><dc:creator><![CDATA[RedPuma]]></dc:creator><pubDate>Fri, 30 Jul 2010 20:51:36 GMT</pubDate></item><item><title><![CDATA[Reply to Grösse von enums on Fri, 30 Jul 2010 20:56:36 GMT]]></title><description><![CDATA[<p>XSpille schrieb:</p>
<blockquote>
<p>EDIT: Kann ich eigentlich irgendwie einen aussagekräftigen Compiler-Fehler erzwingen statt des Werfen einer Exception?</p>
</blockquote>
<p>Indem man die allgemeine Variante nur deklariert aber nicht definiert. Im Übrigen kann man sich aber den Zirkus mit den Templates sparen, da man das auch über ganz normale Funktionsüberladung hinbekommt. Trotzdem ist es aber unhandlich, weil man für jedes enum eine eigene Funktion schreiben muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934243</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Fri, 30 Jul 2010 20:56:36 GMT</pubDate></item><item><title><![CDATA[Reply to Grösse von enums on Fri, 30 Jul 2010 20:59:50 GMT]]></title><description><![CDATA[<p>XSpille schrieb:</p>
<blockquote>
<p>Ich schlag einfach mal Metaprogrammierung vor, weil ich die<br />
Idee eigentlich gar nicht sooo schlecht finde:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;

template&lt;typename T&gt;
int enumSize(const T&amp; t){
        throw &quot;size not available for enum&quot;;
}

enum foo
{
   eins, zwei, drei
};

template&lt;&gt;
int enumSize(const foo&amp; t){
        return 3;
}

enum bar
{
   rot, blau
};

template&lt;&gt;
int enumSize(const bar&amp; t){
        return 2;
}

int main() {
        std::cout &lt;&lt; enumSize(eins) &lt;&lt; std::endl;
        std::cout &lt;&lt; enumSize(rot) &lt;&lt; std::endl;
        return 0;
}
</code></pre>
</blockquote>
<p>Du mischst hier gerade zwei Konzepte: Funktionsüberladung und Type-Traits. Wenn schon würde ich wegen der Compilezeit-Auswertung zu Traits tendieren, aber das hat gegenüber eines <code>Count</code> -Enumerators nur Nachteile. Du brauchst zusätzlichen Code, verkomplizierst das Ganze für nichts und riskierst sehr schnell Inkonsistenzen. Von daher würde ich diesen Ansatz in der Praxis nicht verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934245</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934245</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 30 Jul 2010 20:59:50 GMT</pubDate></item><item><title><![CDATA[Reply to Grösse von enums on Fri, 30 Jul 2010 21:00:18 GMT]]></title><description><![CDATA[<p>Mit einem static_assert geht das. Entweder selber schreiben oder vom Compiler das nutzen (falls vorhanden).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934246</guid><dc:creator><![CDATA[nnnn]]></dc:creator><pubDate>Fri, 30 Jul 2010 21:00:18 GMT</pubDate></item><item><title><![CDATA[Reply to Grösse von enums on Fri, 30 Jul 2010 21:01:08 GMT]]></title><description><![CDATA[<p>RedPuma schrieb:</p>
<blockquote>
<p>#error Ganz böser schlimmer Fehler!</p>
</blockquote>
<p>Da Preprozessordirektiven vorm Compilieren ausgeführt werden,<br />
kriegt man den Fehler dann immer</p>
<p>ipsec schrieb:</p>
<blockquote>
<p>Indem man die allgemeine Variante nur deklariert aber nicht definiert.</p>
</blockquote>
<p>hmm... Kein Kommentar... Manchmal steht man auf dem Schlauch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934247</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934247</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Fri, 30 Jul 2010 21:01:08 GMT</pubDate></item><item><title><![CDATA[Reply to Grösse von enums on Fri, 30 Jul 2010 21:07:51 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>:</p>
<p>Wenn ich das richtig verstanden habe, meinst du das mit dem<br />
Type traits Ansatz so (auch wenn du ihn nicht verwenden würdest):</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;

template&lt;typename T&gt;
int enumSize();

enum foo
{
   eins, zwei, drei
};

template&lt;&gt;
int enumSize&lt;foo&gt;(){
        return 3;
}

enum bar
{
   rot, blau
};

template&lt;&gt;
int enumSize&lt;bar&gt;(){
        return 2;
}

int main() {
        std::cout &lt;&lt; enumSize&lt;foo&gt;() &lt;&lt; std::endl;
        std::cout &lt;&lt; enumSize&lt;bar&gt;() &lt;&lt; std::endl;
        return 0;
}
</code></pre>
<p>Sehe ich das richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934250</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934250</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Fri, 30 Jul 2010 21:07:51 GMT</pubDate></item><item><title><![CDATA[Reply to Grösse von enums on Fri, 30 Jul 2010 21:12:06 GMT]]></title><description><![CDATA[<p>Fast. Funktionen kannst du nicht zur Kompilierzeit ausführen, deshalb greift man zu <em>Metafunktionen</em> (Klassen, die zur Metaprogrammierung verwendet werden).</p>
<pre><code class="language-cpp">enum A {...};
enum B {...};

template &lt;typename Enum&gt;
struct EnumSize;

template &lt;&gt;
struct EnumSize&lt;A&gt;
{
    static const size_t value = 4;
};

template &lt;&gt;
struct EnumSize&lt;B&gt;
{
    static const size_t value = 5;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1934252</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934252</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 30 Jul 2010 21:12:06 GMT</pubDate></item><item><title><![CDATA[Reply to Grösse von enums on Fri, 30 Jul 2010 21:16:41 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Fast. Funktionen kannst du nicht zur Kompilierzeit ausführen, deshalb greift man zu <em>Metafunktionen</em> (Klassen, die zur Metaprogrammierung verwendet werden).</p>
<pre><code class="language-cpp">enum A {...};
enum B {...};

template &lt;typename Enum&gt;
struct EnumSize;

template &lt;&gt;
struct EnumSize&lt;A&gt;
{
    static const size_t value = 4;
};

template &lt;&gt;
struct EnumSize&lt;B&gt;
{
    static const size_t value = 5;
};
</code></pre>
</blockquote>
<p>MERCI!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934254</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Fri, 30 Jul 2010 21:16:41 GMT</pubDate></item></channel></rss>