Maison >développement back-end >C++ >Comment convertir implicitement des énumérations fortement typées en entiers en C ?
Conversion implicite d'énumérations fortement typées en Int
Les énumérations fortement typées, introduites dans C 11, sont conçues pour empêcher les conversions implicites en entiers. Cependant, il peut y avoir des cas où vous souhaitez convertir une valeur d'énumération fortement typée en un entier sans conversion explicite.
Pour résoudre ce problème, plusieurs approches ont été suggérées :
Vous pouvez définir une fonction qui effectue la conversion. Par exemple :
<code class="cpp">#include <iostream> struct a { enum LOCAL_A { A1, A2 }; }; template <typename E> int to_int(E e) { return static_cast<int>(e); } int main() { // Use the to_int function to convert the strongly typed enum value b::B2 to int std::cout << to_int(b::B2) << std::endl; }</code>
Pour simplifier la syntaxe, vous pouvez utiliser un modèle de fonction qui déduit automatiquement le type d'énumération :
<code class="cpp">#include <iostream> struct a { enum LOCAL_A { A1, A2 }; }; template <typename E> constexpr typename std::underlying_type<E>::type get_underlying(E e) noexcept { return static_cast<typename std::underlying_type<E>::type>(e); } int main() { // Use the get_underlying function to convert the strongly typed enum value b::B2 to int std::cout << get_underlying(b::B2) << std::endl; }</code>
Vous pouvez également utiliser une macro pour rendre le processus de conversion plus concis :
<code class="cpp">#include <iostream> struct a { enum LOCAL_A { A1, A2 }; }; #define TO_INT(e) static_cast<int>(e) int main() { // Use the TO_INT macro to convert the strongly typed enum value b::B2 to int std::cout << TO_INT(b::B2) << std::endl; }</code>
Bien qu'il soit possible de convertir des énumérations fortement typées en entiers sans transtypage explicite, il est important de noter que cela peut conduire à un comportement involontaire. Il est recommandé d'utiliser des conversions explicites chaque fois que cela est approprié pour éviter des problèmes potentiels.
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!