Heim >Backend-Entwicklung >C++ >Wie wandelt man in modernem C stark typisierte Enums in Ganzzahlen um?
So wandeln Sie stark typisierte Aufzählungen nahtlos in Ganzzahlen um
Klassisch könnten Aufzählungen implizit in Ganzzahltypen konvertiert werden, was die bequeme Verwendung erleichtert. Allerdings bieten stark typisierte Aufzählungen, die in C 11 eingeführt wurden, diese Flexibilität ohne explizite Umwandlung nicht. Dieser Unterschied ergibt sich aus der Absicht, versehentliche implizite Konvertierungen zu verhindern und gleichzeitig die Sicherheitsmaßnahmen des modernen C aufrechtzuerhalten.
Um die gewünschte Konvertierung ohne manuelle Umwandlung zu erreichen, haben Sie zwei Möglichkeiten:
Definieren Sie eine generische Vorlagenfunktion, die automatisch den zugrunde liegenden Typ einer Aufzählung abruft und die Konvertierung durchführt. Durch diesen Ansatz entfällt die Notwendigkeit, den Zieltyp in der Besetzung anzugeben:
<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>
Verwendung:
<code class="cpp">std::cout << foo(to_underlying(b::B2)) << std::endl;
Bei diesem Ansatz wird der stark typisierte Enum-Wert mit std::underlying_type: in eine Instanz des zugrunde liegenden Typs umgewandelt.
<code class="cpp">std::cout << foo(static_cast<std::underlying_type<b>::type>(b::B2)) << std::endl;</code>
Während die erste Option mehr Flexibilität und Typsicherheit bietet, Die zweite Option ist einfacher und prägnanter. Beide Methoden bieten effektive Möglichkeiten zur nahtlosen Konvertierung stark typisierter Enum-Werte in Ganzzahlen und stehen im Einklang mit der modernen C-Philosophie expliziter Typkonvertierungen.
Das obige ist der detaillierte Inhalt vonWie wandelt man in modernem C stark typisierte Enums in Ganzzahlen um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!