Implizite Konvertierung stark typisierter Aufzählungen in Int
Stark typisierte Aufzählungen, die in C 11 eingeführt wurden, sollen implizite Konvertierungen in Ganzzahlen verhindern. Es kann jedoch Fälle geben, in denen Sie einen stark typisierten Enum-Wert in einen Int-Wert ohne explizite Umwandlung konvertieren möchten.
Um dieses Problem zu beheben, wurden mehrere Ansätze vorgeschlagen:
Sie können eine Funktion definieren, die die Konvertierung durchführt. Zum Beispiel:
<code class="cpp">#include <iostream> struct a { enum LOCAL_A { A1, A2 }; }; template <typename E> int to_int(E e) { return static_cast<int>(e); } int main() { // Use the to_int function to convert the strongly typed enum value b::B2 to int std::cout << to_int(b::B2) << std::endl; }</code>
Um die Syntax zu vereinfachen, können Sie eine Funktionsvorlage verwenden, die leitet automatisch den Aufzählungstyp ab:
<code class="cpp">#include <iostream> struct a { enum LOCAL_A { A1, A2 }; }; template <typename E> constexpr typename std::underlying_type<E>::type get_underlying(E e) noexcept { return static_cast<typename std::underlying_type<E>::type>(e); } int main() { // Use the get_underlying function to convert the strongly typed enum value b::B2 to int std::cout << get_underlying(b::B2) << std::endl; }</code>
Sie können auch ein Makro verwenden, um den Konvertierungsprozess prägnanter zu gestalten :
<code class="cpp">#include <iostream> struct a { enum LOCAL_A { A1, A2 }; }; #define TO_INT(e) static_cast<int>(e) int main() { // Use the TO_INT macro to convert the strongly typed enum value b::B2 to int std::cout << TO_INT(b::B2) << std::endl; }</code>
Obwohl es möglich ist, stark typisierte Aufzählungen ohne explizite Umwandlungen in Ints umzuwandeln, ist es wichtig zu beachten, dass dies zu unbeabsichtigtem Verhalten führen kann. Es wird empfohlen, bei Bedarf explizite Umwandlungen zu verwenden, um potenzielle Probleme zu vermeiden.
Das obige ist der detaillierte Inhalt vonWie konvertiere ich stark typisierte Enums implizit in Ints in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!