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

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

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-04 11:00:301015parcourir

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>

Utilisation :

<code class="cpp">std::cout << foo(to_underlying(b::B2)) << std::endl;
  • 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>

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!

Déclaration:
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