簡體   English   中英

打開范圍枚舉

[英]Switching on scoped enum

我試圖打開unsigned int類型的scoped-enum:

枚舉定義為:

const enum struct EnumType : unsigned int { SOME = 1, MORE = 6, HERE = 8 };

我收到一個const unsigned int引用,我試圖根據枚舉值檢查該值。

void func(const unsigned int & num)
{
    switch (num)
    {
    case EnumType::SOME:
        ....
        break;
    case EnumType::MORE:
        ....
        break;

    ....

    default:
        ....
    }
}

這會導致語法錯誤: Error: This constant expression has type "EnumType" instead of the required "unsigned int" type.

現在,在每個開關上使用static_cast ,例如:

case static_cast<unsigned int>(EnumType::SOME):
    ....
    break;
case static_cast<unsigned int>(EnumType::MORE):
    ....
    break;

修復了語法錯誤,雖然在每個case語句中進行轉換似乎不是一個好方法。 我是否真的需要在每個案例中施放,還是有更好的方法?

您可以通過將switch變量本身轉換為EnumType來解決此問題:

switch (static_cast<EnumType>(num)) {

演示

范圍枚舉的目的是使它們具有強類型。 為此,基礎類型沒有隱式轉換。 您必須轉換開關變量或開關案例。 我建議轉換開關變量,因為這需要更少的代碼,因此將使維護更容易。

IMO正確的解決方案是將函數更改為接受const EnumType & (或僅僅是EnumType )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM