Heim  >  Artikel  >  Backend-Entwicklung  >  Wie konvertiere ich stark typisierte Enums explizit in Ganzzahlen in C?

Wie konvertiere ich stark typisierte Enums explizit in Ganzzahlen in C?

Linda Hamilton
Linda HamiltonOriginal
2024-11-04 12:55:02579Durchsuche

How to Explicitly Convert Strongly Typed Enums to Integers in C  ?

Automatisches Konvertieren einer stark typisierten Aufzählung in einen Ganzzahltyp

In C gewährleisten stark typisierte Aufzählungen eine größere Typsicherheit als herkömmliche Aufzählungen. Im Gegensatz zu herkömmlichen Aufzählungen können stark typisierte Aufzählungen jedoch nicht implizit in Ganzzahltypen konvertiert werden.

Um einen stark typisierten Aufzählungswert E in einen Ganzzahltyp umzuwandeln, ist eine explizite Umwandlung erforderlich, wie zum Beispiel:

<code class="cpp">int i = static_cast<int>(b::B2);</code>

Wenn jedoch der zugrunde liegende Typ der Aufzählung unbekannt ist, kann die folgende Vorlagenfunktion verwendet werden:

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

Jetzt kann die Konvertierung durchgeführt werden, ohne den zugrunde liegenden Typ explizit anzugeben:

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

Es ist wichtig zu beachten, dass diese Konvertierung nur für Werte stark typisierter Aufzählungen funktioniert. Wenn to_underlying() ein herkömmlicher Enumerationswert bereitgestellt wird, wird ein Fehler ausgelöst.

Das obige ist der detaillierte Inhalt vonWie konvertiere ich stark typisierte Enums explizit in Ganzzahlen in C?. 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