"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Les énumérations fortement typées peuvent-elles être automatiquement converties en entiers en C++ ?

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

Publié le 2024-11-16
Parcourir:863

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.

template 
constexpr typename std::underlying_type::type to_underlying(E e) noexcept {
    return static_cast::type>(e);
}

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

std::cout 

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

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3