Frage zu enum in Klassen
-
Wenn ich ein enum in einer Klasse mache, wird dass dann für jede Instanz angelegt oder nur einmal pro Klasse? Falls nein bringt das static davor dann was?
-
Enums werden vom Compiler aufgelöst und durch ihre Konstanten ersetzt (genau wie defines), daher darfst du das ruhig machen.
-
ein enum ist ein Typ (in deinem Fall ein Subtyp der Klasse) - den gibt es nur einmal. Membervariablen mit diesem Typ kann es mehrere geben:
class tester { public: enum color {red,green,blue}; //einmalig private: color m_col; //unabhängig in jedem Objekt static color def_col; //einmalig für die gesamte Klasse };
-
Ich häng' mich mal an, hoffe der OP hat nichts dagegen.

Wenn ich ein enum wie in CStoll's Beispiel definiere, dann kann ich via tester::red auf die die einzelnen enum-Elemente zugreifen und tester::color als Parameter-Typ verwenden. Wie ist das aber, wenn ich zwei enums mit (teilweise) gleichen Elementen habe? Da meckert der Compiler, weil's doppelt definiert ist, wie löst ihr sowas?
Folgende Ideen hatte ich bereits, finde aber beide nicht schön.

1. Mit Prefixe (finde ich nicht sehr schön)
2. Ich definiere die enums außerhalb der Klasse in einem eigenen Namespace, z.B. sonamespace color1 { enum type { red, green, blue }; } namespace color2 { enum type { red, green, blue }; }Dann kann ich das meiner Meinung nach "schön" verwenden, aber die vielen namespaces stören mich ein wenig und die enums sind nicht mehr an die Klasse gebunden.

void foo(color1::type _type = color1::red); void bar(color2::type _type = color2::red);