Seite 1 von 1
enum class oder namespace?
Verfasst: Fr Aug 22, 2014 10:15 pm
von Architekt
Hallo,
Ich wollte euch fragen, welche Möglichkeit ihr wählen würdet.
Ausgangssituation ist, dass ich in einer Aufzählung verschiedene OpenGL Typen haben möchte, diese aber Typ-Sicher machen will.
Dazu bieten sich zwei Möglichkeiten (IMO):
Code: Alles auswählen
enum class Geometry {
Quad = GL_QUADS,
Triangle = GL_TRIANGLES
// ...
};
oder
Code: Alles auswählen
namespace Geometry {
enum Type {
Quad = GL_QUADS,
Triangle = GL_TRIANGLES
// ...
};
}
Das Manko der ersten Variante ist eben, dass ich, um auf den dahinterliegenden Wert zuzugreifen, einen cast brauche:
Also: was würdet ihr eher wählen?
Re: enum class oder namespace?
Verfasst: So Aug 24, 2014 10:02 pm
von Xin
Architekt hat geschrieben:Ich wollte euch fragen, welche Möglichkeit ihr wählen würdet.
Ich schreibe in der Regel "Enum-Klassen", die statische Member enthalten. Der Zeiger auf das statische Element ist das Unterscheidungsmerkmal, an die Klasse kann ich dann weiterhin beliebige Informationen und Methoden hängen.
Code: Alles auswählen
.h
class Geometry
{
private:
GlEnum Value;
Geometry() {} // keine uminitialisierten Werte
Geometry( GlEnum value ) // keine neuen Werte
: Value( value ){}
Geometry( Geometrie const & copy ) {} // keine Kopien
public:
static Geometry Quads, Triangles;
operator GlEneum() { return Value; }
};
.cpp
Geometry const Geometry::Quads( GL_QUADS );
Geometry const Geometry::Triangle( GL_TRIANGLES );
Re: enum class oder namespace?
Verfasst: Mo Aug 25, 2014 6:24 am
von mfro
Architekt hat geschrieben:
Code: Alles auswählen
enum class Geometry {
Quad = GL_QUADS,
Triangle = GL_TRIANGLES
// ...
};
...
Das Manko der ersten Variante ist eben, dass ich, um auf den dahinterliegenden Wert zuzugreifen, einen cast brauche:
Also: was würdet ihr eher wählen?
Die "enum classes" sind ein C++11-Feature für typsichere enums.
Wenn man das verwenden will (was grundsätzlich sicher kein Fehler ist), muß man sich wohl - zumindest solange, bis das Feature auch dort Einzug gefunden hat - typsichere Inline-Wrapper um die entsprechenden C-Funktionen schreiben (also den notwendigen cast "verstecken"), die man damit aufrufen will, sonst hat man ja nur die halbe (und damit keine) Typsicherheit.
Re: enum class oder namespace?
Verfasst: Mo Aug 25, 2014 8:30 am
von Architekt
Ich hab das ganze nun mittels des zweiten Lösungsweges gelöst. Der cast gefiel mir nicht.
