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.
<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>
Mit dieser Vorlagenfunktion kann die Konvertierung wie folgt erreicht werden:
<code class="cpp">std::cout << foo(to_underlying(b::B2)) << std::endl;</code>
Dieser Ansatz eliminiert die explizite Typspezifikation in der Besetzung, wodurch der Konvertierungsprozess vereinfacht und gleichzeitig das gewünschte Verhalten der erzwungenen expliziten Konvertierung für stark typisierte Aufzählungen beibehalten wird.
Das obige ist der detaillierte Inhalt vonKönnen stark typisierte Aufzählungen in C automatisch in Ganzzahlen konvertiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!