Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Scoped Enum

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
11.08.2010, 14:06 Uhr
TOSHMAX



Hallo,

ich suche gerade eine Möglichkeit Enums in einen Scope zu benutzen. Dafür hatte ich schon einige Ideen, aber alle haben ihre Nachteile:
1. Enum in Namespace schreiben, dann kann man den Typ des Enums aber nicht mehr ohne Weiteres benutzen.
2. Eigene Klasse für den Enum schreiben - erfüllt alle Anforderungen, ist aber ca. 4 mal so langsam.
3. Bei den C++0x Enums fehlt mir leider die implizite Konvertierung zu int und anderen Typen.

Kennt jemand von euch vielleicht eine Möglichkeit, die keine dieser Nachteile besitzt?

Gruß
Toshmax
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.08.2010, 15:56 Uhr
0xdeadbeef
Gott
(Operator)


Mir ist nicht ganz klar, was du damit meinst. Du kannst eine enum in jedem Scope benutzen, in dem sie bekannt ist. Und was machen Namespaces da kaputt?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
11.08.2010, 16:40 Uhr
TOSHMAX



Ich bin nicht ganz sicher ob das der richtige Begriff ist, aber den habe ich mal in dem Zusammenhang aufgeschnappt.
Ich meine so etwas:

C++:
enum Color { Red, Green, Blue };
Color Bkgnd = Color::Red; // So will ich es benutzen, geht natürlich nicht

namespace Color {
  enum Type {
    Red, Green, Blue
  };
}

Color::Type Bkgnd = Color::Red; // So müsste man es mit Namespace schreiben



Was ich will schaffen zwar die neuen C++0x Enums, aber mir wäre auch wichtig, dass man sie in beliebige Integertypen umwandeln kann, ohne explizit zu casten.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
11.08.2010, 18:44 Uhr
ao

(Operator)



Zitat von TOSHMAX:
2. Eigene Klasse für den Enum schreiben - erfüllt alle Anforderungen, ist aber ca. 4 mal so langsam.


Inwiefern langsam? Beispiel?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
11.08.2010, 20:03 Uhr
TOSHMAX



Ich habe 1.000.000.000-mal eine Abfolge ( Zuweisen, Kopieren, ... ) mit einem normalen Enum und der Klasse durchgeführt. Heraus kamen dafür Zeiten von 0.5s und 1.89s, also knapp 4-mal so lang.

Die Klasse sah so aus:

C++:
class WeekDay
{
    public:
        enum Type {
            Monday,
            Tuesday,
            Invalid
        };

    private:
        Type m_Value;

    public:
        WeekDay() {}
        WeekDay(Type Value) : m_Value(Value) {}

        operator Type() const { return m_Value; }
};

Dieser Post wurde am 11.08.2010 um 20:05 Uhr von TOSHMAX editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
11.08.2010, 22:20 Uhr
0xdeadbeef
Gott
(Operator)


Ich würde mir wohl so helfen:

C++:
enum color { color_red, color_green, color_blue };


Ansonsten solltest du mal versuchen, die Konstruktoren und den operator Type() deiner Klasse inline zu machen. Hast du die Zeit mit Optimierungen gemessen, und auch nur die verbrauchte CPU-Zeit?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 11.08.2010 um 22:20 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
12.08.2010, 10:51 Uhr
TOSHMAX



Ich habe es gerade mit der einfachsten Optimierung (-O, gcc) versucht und die Zeiten sind wesentlich besser und in etwa gleich bei der Klasse und dem normalen Enum.
Allerdings habe ich Angst mit der Optimierung. Kann man die ohne Probleme benutzen?

Und was meinst du mit "nur die verbrauchte CPU-Zeit"? Ich habe einen Timer um eine for-Anweisung gebaut, der gibt mir also nur die Zeit, die ich brauche.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
12.08.2010, 13:35 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



Zitat von TOSHMAX:
Und was meinst du mit "nur die verbrauchte CPU-Zeit"? Ich habe einen Timer um eine for-Anweisung gebaut, der gibt mir also nur die Zeit, die ich brauche.



naja es gibt: "verbrauchte zeit" und "verbrauchte cpu zeit"
ersteres ist: programm läuft, wird evtl von einem anderne programm verdrängt (und läuft daher nicht), läuft danach weiter: 4s
echte verbrauchte cpu-zeit war aber evtl nur 1s.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
12.08.2010, 14:30 Uhr
TOSHMAX



Ah, Ok. So genau habe ich es nicht gemessen, aber die Zeiten sollten ziemlich genau sein, da ich es mehrmals getestet habe und auch keine dieser Programme offen hatte.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
12.08.2010, 16:17 Uhr
0xdeadbeef
Gott
(Operator)


-O kannst du gefahrlos benutzen. Ich optimiere meinen Code generell mindestens mit -O2 und hatte nie Probleme damit. Gerade, wenn dir Performance am Herzen liegt, wäre es ziemlich albern, darauf zu verzichten.

Nur Debug-Versionen solltest du unoptimiert übersetzen, sonst kriegt der Debugger Probleme.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: