enum class oder namespace?

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Benutzeravatar
Architekt
Beiträge: 172
Registriert: Sa Mai 24, 2014 12:04 pm

enum class oder namespace?

Beitrag von Architekt » Fr Aug 22, 2014 10:15 pm

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:

Code: Alles auswählen

static_cast<GLenum>
Also: was würdet ihr eher wählen?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: enum class oder namespace?

Beitrag von Xin » So Aug 24, 2014 10:02 pm

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 );

Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

mfro
Beiträge: 346
Registriert: Mi Jan 16, 2013 4:58 pm

Re: enum class oder namespace?

Beitrag von mfro » Mo Aug 25, 2014 6:24 am

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:

Code: Alles auswählen

static_cast<GLenum>
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.
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

Benutzeravatar
Architekt
Beiträge: 172
Registriert: Sa Mai 24, 2014 12:04 pm

Re: enum class oder namespace?

Beitrag von Architekt » Mo Aug 25, 2014 8:30 am

Ich hab das ganze nun mittels des zweiten Lösungsweges gelöst. Der cast gefiel mir nicht. :)

Antworten