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!