„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Können stark typisierte Aufzählungen in C++ automatisch in Ganzzahlen konvertiert werden?

Können stark typisierte Aufzählungen in C++ automatisch in Ganzzahlen konvertiert werden?

Veröffentlicht am 16.11.2024
Durchsuche:428

Can Strongly Typed Enums Be Automatically Converted to Integers in C  ?

Automatisieren der Konvertierung stark typisierter Enums in Ganzzahlen

In C gibt es Enums in zwei Varianten: stark typisierte Enums und reguläre Enums. Reguläre Aufzählungen können implizit in Ganzzahlen konvertiert werden, während stark typisierte Aufzählungen eine explizite Umwandlung erfordern. Dies wirft die Frage auf: Gibt es eine automatisierte Möglichkeit, stark typisierte Aufzählungen in Ganzzahlen umzuwandeln, ohne auf explizite Umwandlungen zurückzugreifen?

Die Antwort ist nein, und das ist beabsichtigt. Stark typisierte Aufzählungen sollen die implizite Konvertierung in Ganzzahlen verhindern. Im Wesentlichen stellt der Compiler sicher, dass Sie die Konvertierung von einem Aufzählungswert in eine Ganzzahl explizit bestätigen.

Es gibt jedoch eine Problemumgehung, um die Angabe des zugrunde liegenden Typs in der Umwandlung zu vermeiden. Durch die Verwendung einer Vorlagenfunktion können wir die Typspezifikation der Besetzung abstrahieren.

template 
constexpr typename std::underlying_type::type to_underlying(E e) noexcept {
    return static_cast::type>(e);
}

Mit dieser Template-Funktion kann die Konvertierung wie folgt erreicht werden:

std::cout 

Dieser Ansatz eliminiert die explizite Typspezifikation in der Umwandlung, vereinfacht den Konvertierungsprozess und behält gleichzeitig das gewünschte Verhalten der erzwungenen expliziten Konvertierung für stark typisierte Aufzählungen bei.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3