强类型枚举到 Int 的隐式转换
C 11 中引入的强类型枚举旨在防止隐式转换为整数。但是,在某些情况下,您可能希望将强类型枚举值转换为 int,而不需要显式强制转换。
为了解决此问题,建议了几种方法:
您可以定义一个执行转换的函数。例如:
<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>
为了简化语法,您可以使用以下函数模板:自动推导枚举类型:
<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>
您还可以使用宏使转换过程更加简洁:
<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>
虽然可以在不进行显式强制转换的情况下将强类型枚举转换为整数,但请务必注意,这可能会导致意外行为。建议在适当的时候使用显式强制转换,以避免潜在的问题。
以上是如何在 C 中将强类型枚举隐式转换为整数?的详细内容。更多信息请关注PHP中文网其他相关文章!