2010-08-21 20 views
5

Ich habe eine Aufzählung genannt StackID, und überall in meinem Code muss ich static_cast es zu int ziemlich ein bisschen - z.Gibt es eine Alternative zur Verwendung von static_cast <int> die ganze Zeit?

StackID somestack; 
int id = static_cast<int>(somestack); 

Gibt es eine Kurz Alternative diese Besetzung immer und immer wieder zu tun? Ich habe von "impliziten" Conversions gehört - kann ich das hier nutzen?

(möglicherweise im Zusammenhang mit this question)

+4

Was lässt dich denken, dass du sie überhaupt werfen musst? Sie können Enums für die meisten Anwendungen des Enum bleiben. – rettops

+0

Die Sache mit einem Enum ist es, es als eine echte Art von sich selbst zu behandeln. Ihr Code sollte nicht "int id" sein, sondern "StackID id = somestack". Es sollte niemals durch einen int-Wert, sondern nur durch die enum-Konstanten gesetzt werden. –

Antwort

10

Gibt es etwas, das Sie stattdessen verwenden sollten? Wahrscheinlich nicht. Wenn Sie Enum-Umwandlungen zu Int durchführen, würde ich fragen, ob Sie Enums richtig verwenden (oder wenn Sie eine Schnittstelle zu einer Legacy-API benötigen.) Das heißt, Sie haben nicht zu statischen enums zu ints. Das wird natürlich passieren.

Siehe this Artikel von MSN auf Aufzählungen und enum-> int und int-> Enum (wo Sie haben eine static_cast verwenden.)

+2

+1 auf Enums nicht ordnungsgemäß verwenden. – casablanca

+1

Vielleicht klar "das wird natürlich passieren"? Um genau zu sein, können Sie 'int id = static_cast (somestack);' mit 'int id = somestack;' ersetzen, wenn Sie möchten. Jemand, der den Code liest, erkennt dann weniger wahrscheinlich, dass eine Konvertierung stattfindet, aber wenn Ihre Enums nur einen kleinen Bereich von Werten (weniger als MAX_INT) umfassen, ist das wahrscheinlich egal. –

+0

@Steve Jessop: man könnte auch eine static_assert einführen, um zu überprüfen, dass die 'enum' nicht über die Grenzen hinausgeht. Ein Vergleich der relativen Größen (mit 'sizeof') könnte enorm helfen. –

0

Enum-Wert von Null standardmäßig starten und halten zu steigern. Grundsätzlich sind Enum-Konstanten selbst ganzzahlige Konstanten. Es ist nicht nötig, sie explizit in int zu schreiben. Wenn wir mehrere Konstanten wie Fehlercodes mit eindeutigen Werten anstelle von #define-Anweisungen darstellen wollen, können wir Enum verwenden.

2

Gibt es eine Kurzschriftalternative, um diese Besetzung immer wieder zu wiederholen?

Nun, würdest du es nicht wissen, es ist dein Glückstag! Weil, ja, es ist ein einfacher Weg:

int id = somestack; 

Jeder enum Wert ist implizit konvertierbar in ein int.

Wie auch immer, von Ihren beiden Fragen zu diesem Thema werde ich mich den beteiligten Stimmen anschließen und fragen, ob ein enum wirklich das ist, was Sie hier wollen. (Ich sage nicht, dass es wring, ich weiß zu wenig über dein Problem, das zu wissen. Aber von dem, was ich weiß, scheint es fragwürdig.)

Verwandte Themen