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!