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

Les énumérations fortement typées peuvent-elles être automatiquement converties en entiers en C ?

Mary-Kate Olsen
Libérer: 2024-11-03 22:30:03
original
901 Les gens l'ont consulté

Can Strongly Typed Enums Be Automatically Converted to Integers in C  ?

Automatisation de la conversion d'énumérations fortement typées en nombres entiers

En C, les énumérations se déclinent en deux versions : les énumérations fortement typées et les énumérations régulières. Les énumérations régulières peuvent être implicitement converties en entiers, tandis que les énumérations fortement typées nécessitent une conversion explicite. Cela soulève la question : existe-t-il un moyen automatisé de convertir des énumérations fortement typées en entiers sans recourir à des conversions explicites ?

La réponse est non, et elle est intentionnelle. Les énumérations fortement typées sont conçues pour empêcher la conversion implicite en nombres entiers. Essentiellement, le compilateur garantit que vous reconnaissez explicitement la conversion d'une valeur énumérée en un entier.

Cependant, il existe une solution de contournement pour éviter de spécifier le type sous-jacent dans la conversion. En utilisant une fonction de modèle, nous pouvons faire abstraction de la spécification de type de 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

Avec cette fonction de modèle, la conversion peut être réalisée comme suit :

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

Cette approche élimine le spécification de type explicite dans le cast, simplifiant le processus de conversion tout en conservant le comportement souhaité de conversion explicite forcée pour les énumérations fortement typées.

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