Conversion implicite des énumérations fortement typées en Int
En C, les énumérations fortement typées sont une fonctionnalité relativement nouvelle qui offre une sécurité améliorée par rapport aux énumérations traditionnelles énumérations. Une différence entre ces types est que les énumérations fortement typées ne peuvent pas être implicitement converties en nombres entiers. Ce comportement est délibéré pour empêcher les conversions involontaires.
Cependant, dans certains scénarios, vous devrez peut-être convertir une valeur d'énumération fortement typée en un nombre entier. Dans ces cas, vous pouvez utiliser l'opérateur static_cast. Cependant, vous devez spécifier explicitement le type entier sous-jacent dans la distribution.
<code class="cpp">enum class b { B1, B2 }; int foo(int input) { return input; } int main(void) { int value = static_cast<int>(b::B2); // Explicit cast required std::cout << foo(value) << std::endl; }
Si vous préférez ne pas spécifier explicitement le type sous-jacent, vous pouvez utiliser une fonction de modèle comme celle-ci :
<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); } int main(void) { std::cout << foo(to_underlying(b::B2)) << std::endl; // No explicit cast needed }</code>
En utilisant cette fonction de modèle, vous évitez d'avoir à spécifier le type sous-jacent à chaque fois que vous devez convertir une valeur d'énumération fortement typée en un entier. Il fournit une solution plus concise et réutilisable.
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!