Maison > développement back-end > C++ > le corps du texte

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

Mary-Kate Olsen
Libérer: 2024-11-04 11:00:30
original
1014 Les gens l'ont consulté

How to Cast Strongly Typed Enums to Integers in Modern C  ?

Comment convertir des énumérations fortement typées en entiers de manière transparente

Classiquement, les énumérations pouvaient être implicitement converties en types entiers, facilitant ainsi une utilisation pratique. Cependant, les énumérations fortement typées, introduites en C 11, n'offrent pas cette flexibilité sans conversion explicite. Cette différence découle de l'intention d'éviter les conversions implicites accidentelles, en respectant les mesures de sécurité du C moderne.

Pour réaliser la conversion souhaitée sans conversion manuelle, vous avez deux options :

  • Définir une fonction de modèle :

Définissez une fonction de modèle générique qui récupère automatiquement le type sous-jacent d'une énumération et effectue la conversion. Cette approche élimine le besoin de spécifier le type de cible dans la distribution :

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

Utilisation :

<code class="cpp">std::cout << foo(to_underlying(b::B2)) << std::endl;
Copier après la connexion
  • Utiliser std::underlying_type:

Cette approche consiste à convertir la valeur enum fortement typée en une instance de son type sous-jacent à l'aide de std::underlying_type:

<code class="cpp">std::cout << foo(static_cast<std::underlying_type<b>::type>(b::B2)) << std::endl;</code>
Copier après la connexion

Bien que la première option offre une plus grande flexibilité et une plus grande sécurité de type, la deuxième option est plus simple et concise. Les deux méthodes offrent des moyens efficaces pour convertir de manière transparente des valeurs d'énumération fortement typées en nombres entiers, conformément à la philosophie C moderne des conversions de types explicites.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!