Heim >Backend-Entwicklung >C++ >Wie konvertiere ich stark typisierte Enums implizit in Ints in C?

Wie konvertiere ich stark typisierte Enums implizit in Ints in C?

Susan Sarandon
Susan SarandonOriginal
2024-11-04 12:28:01698Durchsuche

How to Implicitly Convert Strongly Typed Enums to Ints in C  ?

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:

  1. Verwenden einer Funktion:

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>
  1. Verwenden einer Funktion mit Vorlagenargumentableitung:

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>
  1. Erstellen eines Makros:

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!

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