Heim >Backend-Entwicklung >C++ >Wie wandelt man in modernem C stark typisierte Enums in Ganzzahlen um?

Wie wandelt man in modernem C stark typisierte Enums in Ganzzahlen um?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-04 11:00:301082Durchsuche

How to Cast Strongly Typed Enums to Integers in Modern C  ?

So wandeln Sie stark typisierte Aufzählungen nahtlos in Ganzzahlen um

Klassisch könnten Aufzählungen implizit in Ganzzahltypen konvertiert werden, was die bequeme Verwendung erleichtert. Allerdings bieten stark typisierte Aufzählungen, die in C 11 eingeführt wurden, diese Flexibilität ohne explizite Umwandlung nicht. Dieser Unterschied ergibt sich aus der Absicht, versehentliche implizite Konvertierungen zu verhindern und gleichzeitig die Sicherheitsmaßnahmen des modernen C aufrechtzuerhalten.

Um die gewünschte Konvertierung ohne manuelle Umwandlung zu erreichen, haben Sie zwei Möglichkeiten:

  • Definieren Sie eine Vorlagenfunktion:

Definieren Sie eine generische Vorlagenfunktion, die automatisch den zugrunde liegenden Typ einer Aufzählung abruft und die Konvertierung durchführt. Durch diesen Ansatz entfällt die Notwendigkeit, den Zieltyp in der Besetzung anzugeben:

<code class="cpp">template <typename E>
constexpr typename std::underlying_type<E>::type to_underlying(E e) noexcept {
    return static_cast<typename std::underlying_type<E>::type>(e);
}</code>

Verwendung:

<code class="cpp">std::cout << foo(to_underlying(b::B2)) << std::endl;
  • Verwenden Sie std::underlying_type:

Bei diesem Ansatz wird der stark typisierte Enum-Wert mit std::underlying_type: in eine Instanz des zugrunde liegenden Typs umgewandelt.

<code class="cpp">std::cout << foo(static_cast<std::underlying_type<b>::type>(b::B2)) << std::endl;</code>

Während die erste Option mehr Flexibilität und Typsicherheit bietet, Die zweite Option ist einfacher und prägnanter. Beide Methoden bieten effektive Möglichkeiten zur nahtlosen Konvertierung stark typisierter Enum-Werte in Ganzzahlen und stehen im Einklang mit der modernen C-Philosophie expliziter Typkonvertierungen.

Das obige ist der detaillierte Inhalt vonWie wandelt man in modernem C stark typisierte Enums in Ganzzahlen um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn