Maison > développement back-end > C++ > Comment convertir implicitement des énumérations fortement typées en entiers en C ?

Comment convertir implicitement des énumérations fortement typées en entiers en C ?

Susan Sarandon
Libérer: 2024-11-04 12:28:01
original
684 Les gens l'ont consulté

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

Conversion implicite d'énumérations fortement typées en Int

Les énumérations fortement typées, introduites dans C 11, sont conçues pour empêcher les conversions implicites en entiers. Cependant, il peut y avoir des cas où vous souhaitez convertir une valeur d'énumération fortement typée en un entier sans conversion explicite.

Pour résoudre ce problème, plusieurs approches ont été suggérées :

  1. Utilisation d'une fonction :

Vous pouvez définir une fonction qui effectue la conversion. Par exemple :

<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>
Copier après la connexion
  1. Utilisation d'une fonction avec déduction d'arguments de modèle :

Pour simplifier la syntaxe, vous pouvez utiliser un modèle de fonction qui déduit automatiquement le type d'énumération :

<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>
Copier après la connexion
  1. Création d'une macro :

Vous pouvez également utiliser une macro pour rendre le processus de conversion plus concis :

<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>
Copier après la connexion

Bien qu'il soit possible de convertir des énumérations fortement typées en entiers sans transtypage explicite, il est important de noter que cela peut conduire à un comportement involontaire. Il est recommandé d'utiliser des conversions explicites chaque fois que cela est approprié pour éviter des problèmes potentiels.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal