C++ 在 C++11 的時候,引進了「Scoped and strongly typed enums」的概念、使用強型別、有 scope 的 enum class 來取代傳統的 enum(介紹)。
雖然和傳統的列舉型別相比,某些層面他變得比較難用(例如要做 bitwise 運算要另外處理),但是基本上他還是算是更安全的寫法。
一個和傳統的列舉型別相比,比較麻煩的部分,就是每次要使用的時候,都得加上列舉型別的名稱:
enum class EColor { Red, Green, Blue }; void test(const EColor& eColor) { switch (eColor) { case EColor::Red: break; case EColor::Green: break; case EColor::Blue: break; } }
上面的例子可以看到,在每次要使用的時候,都得加上 EColor,有的時候會覺得滿繁瑣的;尤其當數量更多、然後又有需要透過 switch – case 來窮舉的時候,有的時候真的會覺得滿煩的。
而在 C++20 的時候,為了解決這樣的問題,則是引進了「Using-enum-declaration」(參考)的功能,讓開發者可以用類似 using namespace 的形式,來簡化 enum class 的使用。
下面就是一個例子:
void test(const EColor& eColor) { using enum EColor; switch (eColor) { case Red: break; case Green: break; case Blue: break; } }
在這邊,只要加入一行「using enum EColor;」,就可以讓 test() 之後都可以直接使用 EColor 定義的項目了~
如果確定在某個程式碼區塊只會去處理這個列舉型別、而不會和其他東西衝突的話,使用 using enum 應該會是一個滿方便的方法。