透過 using enum 簡化 enum class 的寫法

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 應該會是一個滿方便的方法。

參考:20 Smaller yet Handy C++20 Features

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。