<?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[konstantes Array aus Strukturen]]></title><description><![CDATA[<p>Hallo,<br />
in meinem GUI-Programm kann man die Hintergrundfarben auswählen.<br />
Es gibt 12 konstante Farben.<br />
Momentan ist die Farbabfrage (im Programm) wiefolgt gelöst:</p>
<pre><code>if (farbe == &quot;black&quot;){
red = 0;
green=0;
blue = 0;
} else if( farbe == &quot;white&quot;){
red = 1;
green = 1;
blue = 1;
}else if (farbe ...)
}
draw(red,green,blue,objekt)...
</code></pre>
<p>Ich finde das nicht besonders schön und dadurch wird vorallem der Code stark aufgebläht. Diese Codezeilen kommen nicht nur 1 Mal vor, sondern noch weitere 5 mal... Über die Effizienz kann ich keine Aussage treffen. Da kenne ich mich nicht gut genug aus.</p>
<p>Meine Idee ist nun, das ganze etwas zu strukturieren und damit lesbarer zu machen:</p>
<pre><code>// Defines a color
struct color {
	float red;
	float green;
	float blue;
};

// Size of the Color Enum and Array
const int SIZE_OF_MY_COLORS=12;

enum myColors{
	BLACK, WHITE, BLUE, YELLOW, GREEN, PINK, ORANGE, LIGHTGREEN, CYAN, RED, GRAY, PURPLE
};

const int COLORS[SIZE_OF_MY_COLORS];

COLORS[BLACK].red		= 1.0;
COLORS[BLACK].green		= 1.0;
COLORS[BLACK].blue		= 1.0;

COLORS[WHITE].red		= ...
..

GLWidget::main(){
..
draw(COLORS[farbe].red,COLORS[farbe].green,COLORS[farbe].blue);
..
}
</code></pre>
<p>Ich möchte, dass das ganze schon zur compilezeit (ist das der richtige Begriff?) angelegt wird, also nicht in irgendeiner main() oder einem Konstruktor steckt.</p>
<p>Das ganze kompiliert natürlich noch nicht, aber ich habe trotz längerem Googlen keine Lösung für dieses Problem gefunden.</p>
<p>Ein weiteres Problem ist auch zu entscheiden, was ich in die Header und was ich in den Sourcefile schreiben soll.</p>
<p>Und zu guter letzt muss ich noch irgendwie das Problem lösen, dass die farbe als String übergeben wird, in dem Enum soweit ich weiß aber kein String eingesetzt wird. Aber das lässt sich wohl am einfachsten noch lösen.</p>
<p>Vielen Dank für eure Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/307575/konstantes-array-aus-strukturen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 06 Aug 2026 15:02:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/307575.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 30 Aug 2012 12:06:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to konstantes Array aus Strukturen on Thu, 30 Aug 2012 12:06:55 GMT]]></title><description><![CDATA[<p>Hallo,<br />
in meinem GUI-Programm kann man die Hintergrundfarben auswählen.<br />
Es gibt 12 konstante Farben.<br />
Momentan ist die Farbabfrage (im Programm) wiefolgt gelöst:</p>
<pre><code>if (farbe == &quot;black&quot;){
red = 0;
green=0;
blue = 0;
} else if( farbe == &quot;white&quot;){
red = 1;
green = 1;
blue = 1;
}else if (farbe ...)
}
draw(red,green,blue,objekt)...
</code></pre>
<p>Ich finde das nicht besonders schön und dadurch wird vorallem der Code stark aufgebläht. Diese Codezeilen kommen nicht nur 1 Mal vor, sondern noch weitere 5 mal... Über die Effizienz kann ich keine Aussage treffen. Da kenne ich mich nicht gut genug aus.</p>
<p>Meine Idee ist nun, das ganze etwas zu strukturieren und damit lesbarer zu machen:</p>
<pre><code>// Defines a color
struct color {
	float red;
	float green;
	float blue;
};

// Size of the Color Enum and Array
const int SIZE_OF_MY_COLORS=12;

enum myColors{
	BLACK, WHITE, BLUE, YELLOW, GREEN, PINK, ORANGE, LIGHTGREEN, CYAN, RED, GRAY, PURPLE
};

const int COLORS[SIZE_OF_MY_COLORS];

COLORS[BLACK].red		= 1.0;
COLORS[BLACK].green		= 1.0;
COLORS[BLACK].blue		= 1.0;

COLORS[WHITE].red		= ...
..

GLWidget::main(){
..
draw(COLORS[farbe].red,COLORS[farbe].green,COLORS[farbe].blue);
..
}
</code></pre>
<p>Ich möchte, dass das ganze schon zur compilezeit (ist das der richtige Begriff?) angelegt wird, also nicht in irgendeiner main() oder einem Konstruktor steckt.</p>
<p>Das ganze kompiliert natürlich noch nicht, aber ich habe trotz längerem Googlen keine Lösung für dieses Problem gefunden.</p>
<p>Ein weiteres Problem ist auch zu entscheiden, was ich in die Header und was ich in den Sourcefile schreiben soll.</p>
<p>Und zu guter letzt muss ich noch irgendwie das Problem lösen, dass die farbe als String übergeben wird, in dem Enum soweit ich weiß aber kein String eingesetzt wird. Aber das lässt sich wohl am einfachsten noch lösen.</p>
<p>Vielen Dank für eure Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2246985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2246985</guid><dc:creator><![CDATA[Phys1k3r]]></dc:creator><pubDate>Thu, 30 Aug 2012 12:06:55 GMT</pubDate></item><item><title><![CDATA[Reply to konstantes Array aus Strukturen on Thu, 30 Aug 2012 14:18:24 GMT]]></title><description><![CDATA[<p>Am einfachsten ist eine Struktur mit Non-Type Template-Parametern:</p>
<pre><code class="language-cpp">template&lt;unsigned char R_,
         unsigned char G_,
         unsigned char B_&gt;
struct Colour
{
    static constexpr unsigned char R = R_,//Achtung! Diese Zeile compiliert nur, wenn dein Compiler genug C++11-Unterstützung hat (sonst aus constexpr const machen).
                                   G = G_,
                                   B = B_;

    constexpr Colour() = default;//Achtung! Diese Zeile compiliert nur, wenn dein Compiler genug C++11-Unterstützung hat (sonst weglassen).
};
</code></pre>
<p>Was vielleicht auch nicht schlecht wäre, für eine Struktur die ihre Farbe ändern können soll:</p>
<pre><code class="language-cpp">struct Colour
{
    unsigned char R, G, B;

    Colour(unsigned char const r, 
           unsigned char const g,
           unsigned char const b):
    R(r), G(g), B(b) {}
};
</code></pre>
<p>kaboom!<br />
Schon kannst du (vorausgesetzt du hast einen C++11-kompatiblen Compiler):</p>
<pre><code class="language-cpp">Colour a;
a = {255, 0, 0};
</code></pre>
<p>o.ä. schreiben, ohne irgendwelche Operatoren zu überladen.</p>
<blockquote>
<p>Ein weiteres Problem ist auch zu entscheiden, was ich in die Header und was ich in den Sourcefile schreiben soll.</p>
</blockquote>
<p>Na, deklarationen in den Header, Definitionen in die Source <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=":confused:"
      alt="😕"
    /><br />
Falls du nicht die Regeln kennst, es gibt einen schönen Beitrag dazu von wxSkip (ich finde in aber gerade nicht).</p>
<blockquote>
<p>Und zu guter letzt muss ich noch irgendwie das Problem lösen, dass die farbe als String übergeben wird, in dem Enum soweit ich weiß aber kein String eingesetzt wird.</p>
</blockquote>
<p>Ja, aber <strong>wieso</strong> überhaupt?</p>
<blockquote>
<p>Es gibt 12 konstante Farben.</p>
</blockquote>
<p>Dann nimmst du mein Klassentemplate von oben und machst folgendes:</p>
<p>Header:</p>
<pre><code class="language-cpp">extern Colour&lt;0, 0, 0&gt; black;
extern Colour&lt;255, 0, 0&gt; red;
//....
</code></pre>
<p>Source:</p>
<pre><code class="language-cpp">Colour&lt;0, 0, 0&gt; black;
Colour&lt;255, 0, 0&gt; red;
//...
</code></pre>
<p>Und übergibst so:</p>
<pre><code class="language-cpp">template&lt;unsigned char R, unsigned char G, unsigned char B&gt;
void functionMitFarbparameter(Colour&lt;R, G, B&gt;)
{
    //Hier arbeitest du mit R, G, B
    std::cout &lt;&lt; R;
    //....
</code></pre>
<p>Oder das darunter, und machst folgendes:</p>
<p>Header:</p>
<pre><code class="language-cpp">extern Colour const black;
//...
</code></pre>
<p>Source:</p>
<pre><code class="language-cpp">Colour const black(0, 0, 0);
//...
</code></pre>
<p>Und übergibst einfach call-by-value an die Funktion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2246996</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2246996</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Thu, 30 Aug 2012 14:18:24 GMT</pubDate></item><item><title><![CDATA[Reply to konstantes Array aus Strukturen on Thu, 30 Aug 2012 12:35:37 GMT]]></title><description><![CDATA[<p>Also ein solches Array (Statisches C-Array) wird glaub ich schon in der Compilezeit angelegt.<br />
Was ist denn die Fehlermeldung?</p>
<p>(PS: Wenn du deinem Struct einen Konstruktor gibst, kannst du einfach</p>
<pre><code class="language-cpp">COLORS[BLACK] = color(1.0,1.0,1.0);
</code></pre>
<p>schreiben.<br />
)</p>
<p>(Außerdem, premature optimisation...)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2246997</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2246997</guid><dc:creator><![CDATA[IrgendeinName]]></dc:creator><pubDate>Thu, 30 Aug 2012 12:35:37 GMT</pubDate></item><item><title><![CDATA[Reply to konstantes Array aus Strukturen on Thu, 30 Aug 2012 12:32:19 GMT]]></title><description><![CDATA[<p>IrgendeinName schrieb:</p>
<blockquote>
<p>Also ein solches Array (Statisches C-Array) wird glaub ich schon in der Compilezeit angelegt.</p>
</blockquote>
<p>Ähm, <strong>NEIN</strong>.</p>
<p>Edit: Höchstens so eins:</p>
<pre><code class="language-cpp">constexpr int arr[]{1, 2, 3, ...};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2246998</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2246998</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Thu, 30 Aug 2012 12:32:19 GMT</pubDate></item><item><title><![CDATA[Reply to konstantes Array aus Strukturen on Thu, 30 Aug 2012 13:41:14 GMT]]></title><description><![CDATA[<p>puh, erstmal vielen Dank für die ausführliche Antwort.</p>
<p>Leider habe ich keine Ahnung, was templates sind. Ich werde mich mal in das Thema einlesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247016</guid><dc:creator><![CDATA[Phys1k3r]]></dc:creator><pubDate>Thu, 30 Aug 2012 13:41:14 GMT</pubDate></item><item><title><![CDATA[Reply to konstantes Array aus Strukturen on Fri, 31 Aug 2012 11:50:33 GMT]]></title><description><![CDATA[<p>Phys1k3r schrieb:</p>
<blockquote>
<p>Ich werde mich mal in das Thema einlesen.</p>
</blockquote>
<p>Glaub mir, das ist es definitiv Wert!<br />
Generische Programmierung ist mitunter ein Hauptkonzept von C++.</p>
<p>Was ich dir empfehle ist: C++ Templates - The Complete Guide<br />
P.S.: Der Titel verspricht auf keinen Fall zu viel <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/2247019</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247019</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 31 Aug 2012 11:50:33 GMT</pubDate></item><item><title><![CDATA[Reply to konstantes Array aus Strukturen on Thu, 30 Aug 2012 14:29:34 GMT]]></title><description><![CDATA[<p>Hey,<br />
interessant ist das wirklich und irgendwann wird das auch mal gemacht, aber momentan fehlt dazu einfach die Zeit.</p>
<p>Andere Frage, ich benutze Visual Studio 2008, hat das überhaupt eine c++11 Unterstützung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247031</guid><dc:creator><![CDATA[Phys1k3r]]></dc:creator><pubDate>Thu, 30 Aug 2012 14:29:34 GMT</pubDate></item><item><title><![CDATA[Reply to konstantes Array aus Strukturen on Thu, 30 Aug 2012 14:34:50 GMT]]></title><description><![CDATA[<p>Phys1k3r schrieb:</p>
<blockquote>
<p>Hey,<br />
interessant ist das wirklich und irgendwann wird das auch mal gemacht, aber momentan fehlt dazu einfach die Zeit.</p>
<p>Andere Frage, ich benutze Visual Studio 2008, hat das überhaupt eine c++11 Unterstützung?</p>
</blockquote>
<p>Nö. Das 11 im Namen kommt Schließlich von 2011, und auch wenn einige Features AFAIK schon vorher von Compilern unterstützt wurde (weil sie schon vorher bekannt wurden), ist 2008 wohl noch etwas zu früh.</p>
<p>Steig doch auf VS2012 um, wo ist das Problem?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247033</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Thu, 30 Aug 2012 14:34:50 GMT</pubDate></item><item><title><![CDATA[Reply to konstantes Array aus Strukturen on Thu, 30 Aug 2012 15:57:32 GMT]]></title><description><![CDATA[<p>Hacker uebertreibt mal wieder masslos <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/2247062</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247062</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Thu, 30 Aug 2012 15:57:32 GMT</pubDate></item><item><title><![CDATA[Reply to konstantes Array aus Strukturen on Thu, 30 Aug 2012 16:01:33 GMT]]></title><description><![CDATA[<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Hacker uebertreibt mal wieder masslos <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>
</blockquote>
<p>Wieso? <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="😞"
    /><br />
Ah, ich sehe was du meinst. <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="😞"
    /> sry</p>
<p>Btw: Nenn' mich nicht Hacker.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247063</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247063</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Thu, 30 Aug 2012 16:01:33 GMT</pubDate></item><item><title><![CDATA[Reply to konstantes Array aus Strukturen on Thu, 30 Aug 2012 17:54:56 GMT]]></title><description><![CDATA[<p>Hallo Phys1k3r,</p>
<p>lass dich nicht von Sone (früher Hacker) verwirren - er meint er wäre der tolle Hecht, weil er jetzt einen C++11 Compiler benutzt.</p>
<p>Es geht auch ganz einfach (so wie es schon unter C funktioniert hat):</p>
<pre><code class="language-cpp">const int COLORS[SIZE_OF_MY_COLORS] =
{
    { 0, 0, 0 },
    { 1, 1, 1 },
    { 0, 0, 1 },
    // ...
}
</code></pre>
<p>Noch ein Tipp:<br />
du kannst auch SIZE_OF_MY_COLORS automatisch vom Compiler berechnen lassen:</p>
<pre><code class="language-cpp">enum myColor // Einzahl ist besser als Name (s.u.)
{
    BLACK, WHITE, BLUE, YELLOW, GREEN, PINK, ORANGE, LIGHTGREEN, CYAN, RED, GRAY, PURPLE,
    SIZE_OF_MY_COLORS
};
</code></pre>
<p>Nur für die Konvertierung eines Strings in das entsprechende 'enum' empfehle ich dir std::map zu benutzen:</p>
<pre><code class="language-cpp">#include &lt;map&gt;

std::map&lt;const char*, myColors&gt; myColorMap;

int main()
{
  myColorMap[&quot;black&quot;] = BLACK;
  myColorMap[&quot;white&quot;] = WHITE;
  // ...
}
</code></pre>
<p>Zugriff auf Map, s. <a href="http://www.cplusplus.com/reference/stl/map/find" rel="nofollow">http://www.cplusplus.com/reference/stl/map/find</a></p>
<p>(alternativ statt 'const char *' kannst du selbstverständlich auch 'std::string' benutzen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247081</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247081</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Thu, 30 Aug 2012 17:54:56 GMT</pubDate></item><item><title><![CDATA[Reply to konstantes Array aus Strukturen on Thu, 30 Aug 2012 17:52:16 GMT]]></title><description><![CDATA[<p>Th69 schrieb:</p>
<blockquote>
<p>lass dich nicht von Sone (früher Hacker) verwirren - er meint er wäre der tolle Hecht, weil er jetzt einen C++11 Compiler benutzt.</p>
</blockquote>
<p>Sag mal bist du bescheuert oder was?</p>
<pre><code class="language-cpp">std::map&lt;const char*, myColors) myColorMap;
</code></pre>
<p>Ich bin sicher, das ist eine einleuchtende Logik. <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="🙄"
    /><br />
Wenn der Anfänger Templates schon nicht verstehen kann/will, brauchst du ihm nicht gleich einen STL-Container um die Ohren zu hauen, und ihn gleich damit zu konfrontieren. Dazu noch mit syntaktisch falscher Deklaration. Gleich kommt er wieder, weil sein Compiler kryptische Fehlermeldungen ausspuckt.<br />
Andererseits, wenn schon ne map, dann wieso nicht gleich... <code>std::(tr1::)array</code> ?</p>
<p>&lt;irony&gt;</p>
<p>Neeeiin! Das geht doch mit C schon, wieso C++ verstehen wenn es auch mit C-Arrays geht!? Das hört sich nach kompliziertem Blödsinn an, denn Hacker versucht dich zu verwirren und entmutigen! Ja, benutz weiter deine C-&quot;Äquivalente&quot; and never change a running system!</p>
<p>Und schöne Bezeichner hast du dir da ausgedacht. Da kommt zuerst das oft für metasyntaktische Variablenidentifier genutzte präfix <code>my</code> , dass bestimmt in so gut wie jedem professionellem Projektcode vorkommt. Dann natürlich ohne Präfix die Enumeratoren <code>BLACK</code> , <code>WHITE</code> , usw. genial! Das mann eigentlich ein universales Präfix davorsetzt um Enumeratoren eindeutig als solche und als Enumeratoren einer bestimmten Enumeration zu identifizieren ist C++-Gefrickel und wird dazu auch nur von Anfängern gemacht. Und überhaupt: strongly-typed enumerations erwähnen tun auch nur Forentrolle, nöch? <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>
<p>Aber mal abgesehen davon ist dein Konzept einfach umwerfend. Zuerst die Tatsache, dass der <code>mapped_type</code> der map keinerlei Informationen enthält, die nicht schon der String hat. Also Redundanz pur, oder? Nein! Nach wie vor ein Geniestreich!<br />
Dazu die Tatsache, dass die map erst in der main() befüllt wird! Was für eine Kohäsionsmaximierung!<br />
Wieso nicht vorschlagen, dass C++11 dank aggregate/uniform-initialisation eine viel schönere Schreibweise bereitstellt?<br />
Ohh, da haben wir schon wieder das Wort &quot;C++&quot; drinnen, und das wollen wir doch nicht. Also bloß weg damit.</p>
<p>&lt;/irony&gt;</p>
<p>Edit: Ich merke schon, 90% von dem was ich geschrieben hab' ist Blödsinn. <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/2247090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247090</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Thu, 30 Aug 2012 17:52:16 GMT</pubDate></item><item><title><![CDATA[Reply to konstantes Array aus Strukturen on Thu, 30 Aug 2012 18:24:20 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>Sag mal bist du bescheuert oder was?</p>
</blockquote>
<p>Ich glaube, er ist nicht nur geistig gesund, sondern hat auch Ahnung.</p>
<blockquote>
<pre><code class="language-cpp">std::map&lt;const char*, myColors) myColorMap;
</code></pre>
<p>Ich bin sicher, das ist eine einleuchtende Logik. <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="🙄"
    /><br />
Wenn der Anfänger Templates schon nicht verstehen kann/will, brauchst du ihm nicht gleich einen STL-Container um die Ohren zu hauen</p>
</blockquote>
<p>Siehst du hier eine einfachere Lösung, ohne viel Aufwand,die das Problem des Threaderstellers löst? Komm, raus damit.<br />
Ausserdem warst du es, der Template Programmierung ins Spiel brachte. Und zwar auf einem wesentlich höheren Anforderungsniveau als &quot;einfach mal std::map verwenden&quot;.<br />
//edit ich würde aber statt const char* wirklich std::string verwenden, sonst gibts komisches Verhalten. Oder nen anderen key-compare verwenden.</p>
<blockquote>
<p>und ihn gleich damit zu konfrontieren. Dazu noch mit syntaktisch falscher Deklaration.</p>
</blockquote>
<p>Als ob du dich niemals vertippt hättest. Lächerlich. Sogar für deine Maßstäbe.</p>
<blockquote>
<p>Andererseits, wenn schon ne map, dann wieso nicht gleich... <code>std::(tr1::)array</code> ?</p>
</blockquote>
<p>1. Weil array das Problem vor C++11 nicht so elegant löst wie ein C-array. Probier es aus. Zeig uns, wie du all diese Farben so kurz definierst, wie durch eine einfache verschachtelte Array-Definition.<br />
2. Weil array vor C++11 bei keinem Compiler verfügbar sein muss (technical report != standard).</p>
<p>Der Rest ist einfach nur Schrott und ich hab aufgehört deinen Post nach ca 2 weiteren Sätzen zu lesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247098</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Thu, 30 Aug 2012 18:24:20 GMT</pubDate></item><item><title><![CDATA[Reply to konstantes Array aus Strukturen on Thu, 30 Aug 2012 20:26:46 GMT]]></title><description><![CDATA[<p>*räusper* contenance...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247158</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247158</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 30 Aug 2012 20:26:46 GMT</pubDate></item><item><title><![CDATA[Reply to konstantes Array aus Strukturen on Thu, 30 Aug 2012 20:40:09 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>Am einfachsten ist eine Struktur mit Non-Type Template-Parametern...</p>
</blockquote>
<p>Schwachfug, die eindeutige Fragestellung mit haufenweise Templatemüll zu beantworten.</p>
<p>Sone schrieb:</p>
<blockquote>
<p>IrgendeinName schrieb:</p>
<blockquote>
<p>Also ein solches Array (Statisches C-Array) wird glaub ich schon in der Compilezeit angelegt.</p>
</blockquote>
<p>Ähm, <strong>NEIN</strong>.</p>
</blockquote>
<p>Doch, wobei das originale &quot;Array&quot; des Fragers nur ein vermaledeites VLA Zeugs ist, und somit eben nicht zur Compilezeit arbeitet.</p>
<pre><code class="language-cpp">// Defines a color
struct color {
    float red;
    float green;
    float blue;
};

// Size of the Color Enum and Array
const int SIZE_OF_MY_COLORS=12;  // das ist nur eine Laufzeitkonstante, und keine zur Compilezeit bekannte

enum myColors{
    BLACK, WHITE, BLUE, YELLOW, GREEN, PINK, ORANGE, LIGHTGREEN, CYAN, RED, GRAY, PURPLE
};

// hier mal eine Implementierung deines angefragten Arrays
// versuche mal, so globales Zeugs zu minimieren, auch wenn es const ist und es dir zunächst plausibel erscheint
const color COLORS[]={
{1,2,3}, // BLACK
{4,5,6}, // WHITE
{7,8,9}, // BLUE
...
{1,1,1}  // PURPLE
};

int main()
{
...
size_t SIZE_OF_MY_COLORS=sizeof(COLORS)/sizeof(*COLORS);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2247163</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247163</guid><dc:creator><![CDATA[Wutz]]></dc:creator><pubDate>Thu, 30 Aug 2012 20:40:09 GMT</pubDate></item><item><title><![CDATA[Reply to konstantes Array aus Strukturen on Thu, 30 Aug 2012 20:45:47 GMT]]></title><description><![CDATA[<p>Phys1k3r schrieb:</p>
<blockquote>
<p>Andere Frage, ich benutze Visual Studio 2008, hat das überhaupt eine c++11 Unterstützung?</p>
</blockquote>
<p>Nein, aber zumindest TR1 kannst du für den Compiler mit dem Featurepack noch nachinstallieren, da ist dann auch ein tr1::array Typ dabei:<br />
<a href="http://www.microsoft.com/en-us/download/details.aspx?id=6922" rel="nofollow">http://www.microsoft.com/en-us/download/details.aspx?id=6922</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247165</guid><dc:creator><![CDATA[Wutz]]></dc:creator><pubDate>Thu, 30 Aug 2012 20:45:47 GMT</pubDate></item><item><title><![CDATA[Reply to konstantes Array aus Strukturen on Thu, 30 Aug 2012 20:48:04 GMT]]></title><description><![CDATA[<p>Th69 schrieb:</p>
<blockquote>
<p>Noch ein Tipp:<br />
du kannst auch SIZE_OF_MY_COLORS automatisch vom Compiler berechnen lassen:</p>
<pre><code class="language-cpp">enum myColor // Einzahl ist besser als Name (s.u.)
{
    BLACK, WHITE, BLUE, YELLOW, GREEN, PINK, ORANGE, LIGHTGREEN, CYAN, RED, GRAY, PURPLE,
    SIZE_OF_MY_COLORS
};
</code></pre>
</blockquote>
<p>Hübsch aber unrobust und somit für Anfänger ungeeignet.<br />
Z.B. bei</p>
<pre><code class="language-cpp">enum myColor // Einzahl ist besser als Name (s.u.)
{
    BLACK=1, WHITE, BLUE, YELLOW, GREEN, PINK, ORANGE, LIGHTGREEN, CYAN, RED, GRAY, PURPLE,
    SIZE_OF_MY_COLORS
};
</code></pre>
<p>dürften nur sehr wenige Compiler warnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247166</guid><dc:creator><![CDATA[Wutz]]></dc:creator><pubDate>Thu, 30 Aug 2012 20:48:04 GMT</pubDate></item><item><title><![CDATA[Reply to konstantes Array aus Strukturen on Fri, 31 Aug 2012 09:34:59 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe jetzt den Code von Wutz genommen, da er simpel ist und funktioniert.</p>
<p>Jedoch verstehe ich den Nutzen dieser Codezeile nicht:</p>
<pre><code>size_t SIZE_OF_MY_COLORS=sizeof(COLORS)/sizeof(*COLORS);
</code></pre>
<p>Das mit std::map&lt;const char*, myColors) myColorMap; werde ich vielleicht nutzen. Ich muss noch abwägen, ob ich den kompletten Code umschreibe und die Strings komplett herausnehme (was länger dauert, aber sicherlich schöner ist) oder ob ich Zeit spare und Strings weiter verwende.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247277</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247277</guid><dc:creator><![CDATA[Phys1k3r]]></dc:creator><pubDate>Fri, 31 Aug 2012 09:34:59 GMT</pubDate></item><item><title><![CDATA[Reply to konstantes Array aus Strukturen on Fri, 31 Aug 2012 10:07:42 GMT]]></title><description><![CDATA[<p>Phys1k3r schrieb:</p>
<blockquote>
<p>Jedoch verstehe ich den Nutzen dieser Codezeile nicht:</p>
<pre><code>size_t SIZE_OF_MY_COLORS=sizeof(COLORS)/sizeof(*COLORS);
</code></pre>
</blockquote>
<p>Das ist die Gesamtgröße des Arrays geteilt durch die Größe des ersten Elementes, also die Anzahl der Elemente im Array.</p>
<p>Arrays zerfallen beim kleinsten Anzeichen von Gefahr zu einem Zeiger auf ihr erstes Element, sogenannter <em>array to pointer decay</em> (Man darf aber nie den Fehler machen, anzunehmen, Arrays und Pointer wären das gleiche!). Daher ist <code>sizeof(*COLORS)</code> ausgeschrieben das gleiche wie <code>sizeof(*&amp;COLORS[0])</code> . Hingegen ist <code>sizeof(COLORS)</code> eine der wenigen Ausnahmen vom array decay und man erhält die Größe des gesamten Arrays. Insgesamt ist das ein Standardweg, um die Elementzahl eines Arrays zur Compilezeit zu ermitteln, ohne dass man dessen Länge oder Typ kennen braucht.</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> Achtung: Das geht natürlich nicht, wenn man nur einen Zeiger auf ein Array vorliegen hat. Dann würde man mit sizeof die Größe des Zeigers erhalten. In C++ stellt sich diese Problematik aber in der Regel gar nicht erst, siehe dieser Thread.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247291</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 31 Aug 2012 10:07:42 GMT</pubDate></item><item><title><![CDATA[Reply to konstantes Array aus Strukturen on Fri, 31 Aug 2012 11:30:34 GMT]]></title><description><![CDATA[<p>Hallo,<br />
das mit den Maps funktioniert soweit auch ganz gut.</p>
<p>Es ist eigentlich ziemlich simpel und ich denke, ich werde das vorerst so lassen.</p>
<p>std::map&lt;std::string, int&gt; myColorMap;</p>
<p>Eine Frage habe ich noch, welche Exception wird geworfen, wenn die Map den String nicht finden kann.</p>
<p>Ich würde das gerne mit try und catch abfangen.</p>
<p>Die c++ Reference schreibt etwas von einem Iterator, was mich nicht direkt weiterbringt.</p>
<p>EDIT: Habe gerade herausgefunden, dass überhaupt keine Exception geworfen wird..<br />
Naja, erstmal weiter googlen und hoffen, dass hier noch eine einfache Antwort kommt <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>EDIT 2:<br />
habe mir jetzt so einen Code zusammengebastelt:</p>
<p>Kann man das so durchgehen lassen?</p>
<pre><code class="language-cpp">// This is just for test issues
		std::string string =  &quot;pfgurple&quot;;

		if(myColorMap.find(string) != myColorMap.end() )
			cout &lt;&lt; &quot;black ==&gt; &quot; &lt;&lt; myColorMap.find(string)-&gt;second &lt;&lt; endl;
		else
			cout &lt;&lt; &quot;ColorString was not found in colorMap&quot; &lt;&lt; endl;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2247318</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247318</guid><dc:creator><![CDATA[Phys1k3r]]></dc:creator><pubDate>Fri, 31 Aug 2012 11:30:34 GMT</pubDate></item><item><title><![CDATA[Reply to konstantes Array aus Strukturen on Fri, 31 Aug 2012 11:21:17 GMT]]></title><description><![CDATA[<p>Warum wurde der Link zum Buch immer noch von keinem Mod entfernt? So wird er nur weiter dupliziert (schon 4 Posts mittlerweile)...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247320</guid><dc:creator><![CDATA[zerärgert]]></dc:creator><pubDate>Fri, 31 Aug 2012 11:21:17 GMT</pubDate></item><item><title><![CDATA[Reply to konstantes Array aus Strukturen on Fri, 31 Aug 2012 11:53:28 GMT]]></title><description><![CDATA[<p>zerärgert schrieb:</p>
<blockquote>
<p>Warum wurde der Link zum Buch immer noch von keinem Mod entfernt? So wird er nur weiter dupliziert (schon 4 Posts mittlerweile)...</p>
</blockquote>
<p>Immer mit der Ruhe, ein alter Mann ist kein <s>D-Zug</s> Wikipedia-Löschadmin.</p>
<p>Der Offtopicteil und alle Links zweifelhafter Legalität sollten nun vollständig entfernt sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247331</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 31 Aug 2012 11:53:28 GMT</pubDate></item><item><title><![CDATA[Reply to konstantes Array aus Strukturen on Fri, 31 Aug 2012 13:23:30 GMT]]></title><description><![CDATA[<p>Phys1k3r schrieb:</p>
<blockquote>
<p>EDIT 2:<br />
habe mir jetzt so einen Code zusammengebastelt:</p>
<p>Kann man das so durchgehen lassen?</p>
<pre><code class="language-cpp">// This is just for test issues
		std::string string =  &quot;pfgurple&quot;;

		if(myColorMap.find(string) != myColorMap.end() )
			cout &lt;&lt; &quot;black ==&gt; &quot; &lt;&lt; myColorMap.find(string)-&gt;second &lt;&lt; endl;
		else
			cout &lt;&lt; &quot;ColorString was not found in colorMap&quot; &lt;&lt; endl;
</code></pre>
</blockquote>
<p>Ja, das geht wunderbar. Allerdings ist es ein kleines bisschen ineffizient, weil du zwei mal den selben String suchst, den du doch schon beim ersten mal gefunden hast, mach es in Zukunft lieber so:</p>
<pre><code class="language-cpp">std::map&lt;char const*, myColor&gt;::const_iterator iter = myColorMap.find(string); ///Tja, hättest du einen C++11-kompatiblen Compiler, könntest du einfach auto benutzen :p
if(iter != myColorMap.end() )
        cout &lt;&lt; &quot;black ==&gt; &quot; &lt;&lt; iter-&gt;second &lt;&lt; endl;
else
        //..
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2247373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247373</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 31 Aug 2012 13:23:30 GMT</pubDate></item><item><title><![CDATA[Reply to konstantes Array aus Strukturen on Fri, 31 Aug 2012 14:57:20 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>zerärgert schrieb:</p>
<blockquote>
<p>Warum wurde der Link zum Buch immer noch von keinem Mod entfernt? So wird er nur weiter dupliziert (schon 4 Posts mittlerweile)...</p>
</blockquote>
<p>Immer mit der Ruhe, ein alter Mann ist kein <s>D-Zug</s> Wikipedia-Löschadmin.</p>
</blockquote>
<p>???<br />
Ich dachte du bist <strong>30</strong>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247403</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 31 Aug 2012 14:57:20 GMT</pubDate></item><item><title><![CDATA[Reply to konstantes Array aus Strukturen on Fri, 31 Aug 2012 15:15:44 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>zerärgert schrieb:</p>
<blockquote>
<p>Warum wurde der Link zum Buch immer noch von keinem Mod entfernt? So wird er nur weiter dupliziert (schon 4 Posts mittlerweile)...</p>
</blockquote>
<p>Immer mit der Ruhe, ein alter Mann ist kein <s>D-Zug</s> Wikipedia-Löschadmin.</p>
</blockquote>
<p>???<br />
Ich dachte du bist <strong>30</strong>?</p>
</blockquote>
<p>Werd mal 30 und dann beurteile das nochmal <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/2247414</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247414</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 31 Aug 2012 15:15:44 GMT</pubDate></item><item><title><![CDATA[Reply to konstantes Array aus Strukturen on Fri, 31 Aug 2012 16:15:57 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Sone schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>zerärgert schrieb:</p>
<blockquote>
<p>Warum wurde der Link zum Buch immer noch von keinem Mod entfernt? So wird er nur weiter dupliziert (schon 4 Posts mittlerweile)...</p>
</blockquote>
<p>Immer mit der Ruhe, ein alter Mann ist kein <s>D-Zug</s> Wikipedia-Löschadmin.</p>
</blockquote>
<p>???<br />
Ich dachte du bist <strong>30</strong>?</p>
</blockquote>
<p>Werd mal 30 und dann beurteile das nochmal <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>
</blockquote>
<p>Ich weiß nicht, ob du mir jetzt Leid tun sollst <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="🙂"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2247433</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2247433</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 31 Aug 2012 16:15:57 GMT</pubDate></item></channel></rss>