自動將強型別枚舉轉換為整數
在C 中,枚舉有兩種風格:強型態枚舉和常規枚舉。常規枚舉可以隱式轉換為整數,而強型別枚舉需要明確轉換。這就提出了一個問題:是否有一種自動方法可以將強型別枚舉轉換為整數,而無需使用明確強制轉換?
答案是否定的,而且這是有意為之。強型別枚舉旨在防止隱式轉換為整數。本質上,編譯器確保您明確確認從枚舉值到整數的轉換。
但是,有一種解決方法可以避免在強制轉換中指定基礎類型。透過利用模板函數,我們可以抽像出強制轉換的型別規範。
<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); }</code>
使用此模板函數,可以實現如下轉換:
<code class="cpp">std::cout << foo(to_underlying(b::B2)) << std::endl;</code>
這種方法消除了強制轉換中的顯式類型規範,簡化了轉換過程,同時保持了強型別枚舉的強制明確轉換所需的行為。
以上是C 中的強型別枚舉可以自動轉換為整數嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!