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.
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