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.
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