<?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[Erweiterbares Enum]]></title><description><![CDATA[<p>Morgen!</p>
<p>Ich habe ein Enum, das ein Speichersystem beschreibt:</p>
<pre><code class="language-cpp">enum MemClass {
   MEM_RS,
   MEM_AUDIO,
   MEM_AI
}
</code></pre>
<p>Was die Werte genau bedeuten ist nicht so wichtig. Das Enum nutze ich in einer Funktion void foo(MemClass mem); die abhängig vom Enum verschiedene Sachen macht und auch das Speichersystem als String auf die Konsole ausgibt.<br />
In Pseudocode quasi sowas:</p>
<pre><code class="language-cpp">case MEM_RS:
   // Tu was 
   cout &lt;&lt; &quot;MEM_RS&quot;;
</code></pre>
<p>Nun möchte ich aber, dass Benutzer meines Codes weitere Speicherklassen hinzufügen können. Sie sollen quasi ein eigenes MEM_XYZ definieren können und auch den dazugeführen String (also immer z.B. &quot;MEM_FOO&quot; für MEM_FOO).<br />
Wie könnte man das machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/287787/erweiterbares-enum</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 07:46:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/287787.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 04 Jun 2011 07:24:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Erweiterbares Enum on Sat, 04 Jun 2011 07:24:41 GMT]]></title><description><![CDATA[<p>Morgen!</p>
<p>Ich habe ein Enum, das ein Speichersystem beschreibt:</p>
<pre><code class="language-cpp">enum MemClass {
   MEM_RS,
   MEM_AUDIO,
   MEM_AI
}
</code></pre>
<p>Was die Werte genau bedeuten ist nicht so wichtig. Das Enum nutze ich in einer Funktion void foo(MemClass mem); die abhängig vom Enum verschiedene Sachen macht und auch das Speichersystem als String auf die Konsole ausgibt.<br />
In Pseudocode quasi sowas:</p>
<pre><code class="language-cpp">case MEM_RS:
   // Tu was 
   cout &lt;&lt; &quot;MEM_RS&quot;;
</code></pre>
<p>Nun möchte ich aber, dass Benutzer meines Codes weitere Speicherklassen hinzufügen können. Sie sollen quasi ein eigenes MEM_XYZ definieren können und auch den dazugeführen String (also immer z.B. &quot;MEM_FOO&quot; für MEM_FOO).<br />
Wie könnte man das machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2073123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2073123</guid><dc:creator><![CDATA[Eulentier]]></dc:creator><pubDate>Sat, 04 Jun 2011 07:24:41 GMT</pubDate></item><item><title><![CDATA[Reply to Erweiterbares Enum on Sat, 04 Jun 2011 07:40:32 GMT]]></title><description><![CDATA[<p>Nein, das geht nicht. Aber du könntest die Zuständigkeiten neu verteilen und anstelle des enum eine (eventuell abstrakte) Basisklasse machen, die für alle Stellen, wo &quot;abhängig vom Enum verschiedene Sachen&quot; gemacht werden sollen, eine virtuelle Funktion bereitstellt. Dann wird aus Konstruktionen wie:</p>
<pre><code class="language-cpp">switch(memClass)
{
case MEM_RS:
  cout&lt;&lt;&quot;MEM_RS&quot;&lt;&lt;endl;
  break;
...
}
</code></pre>
<p>das wesentlich kürzere:</p>
<pre><code class="language-cpp">cout&lt;&lt;memClass.name()&lt;&lt;endl;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2073127</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2073127</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 04 Jun 2011 07:40:32 GMT</pubDate></item><item><title><![CDATA[Reply to Erweiterbares Enum on Sat, 04 Jun 2011 08:40:03 GMT]]></title><description><![CDATA[<p>Aber wie mach ich dann die Aufrufe. Die Funktion foo(MemClass m) wird in Dutzenden Dateien aufgerufen. Ich muss dann ja an jeder Stelle ein Objekt parat haben. Das muss ich dann ja global machen? <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="😕"
    /></p>
<p>Eigentlich brauche ich ja nur eine Konstante (#define oder Integer) und den String dazu, z.B:<br />
MEM_FOO und &quot;MEM_FOO&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2073138</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2073138</guid><dc:creator><![CDATA[Eulentier]]></dc:creator><pubDate>Sat, 04 Jun 2011 08:40:03 GMT</pubDate></item><item><title><![CDATA[Reply to Erweiterbares Enum on Sat, 04 Jun 2011 08:48:37 GMT]]></title><description><![CDATA[<p>Eulentier schrieb:</p>
<blockquote>
<p>Aber wie mach ich dann die Aufrufe. Die Funktion foo(MemClass m) wird in Dutzenden Dateien aufgerufen. Ich muss dann ja an jeder Stelle ein Objekt parat haben. Das muss ich dann ja global machen? <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="😕"
    /></p>
</blockquote>
<p>Über Zeiger/Referenzen auf deine MemClass-Instanzen.</p>
<blockquote>
<p>Eigentlich brauche ich ja nur eine Konstante (#define oder Integer) und den String dazu, z.B:<br />
MEM_FOO und &quot;MEM_FOO&quot;.</p>
</blockquote>
<p>Und was ist mit den zwei Dutzend weiteren Stellen, wo du auch solche <code>switch(memClass)</code> Konstruktionen benötigst, um anhand der übergebenen Speicherklasse irgendwas zu machen?</p>
<p>Aber wenn du wirklich sicher bist, daß du <strong>nur</strong> den Namen benötigst, könnte auch eine map&lt;int,string&gt; ausreichen <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/2073140</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2073140</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 04 Jun 2011 08:48:37 GMT</pubDate></item></channel></rss>