Heim > Backend-Entwicklung > C++ > Hauptteil

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

Mary-Kate Olsen
Freigeben: 2024-11-04 11:00:30
Original
1015 Leute haben es durchsucht

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>
Nach dem Login kopieren

Verwendung:

<code class="cpp">std::cout << foo(to_underlying(b::B2)) << std::endl;
Nach dem Login kopieren
  • 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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!