簡體   English   中英

如何使用強類型枚舉

[英]How to use strongly typed enums

我無法編譯以下程序:

#include <iostream>

using namespace std;

enum class my_enum
{
    ANT,
    BAT,
    CAT,
    DOG,
    EGG,
    FAN,
    MAX_MEMBERS
};

int main(int argc, char * argv[])
{
    my_enum i = my_enum::ANT;

    for(i = my_enum::ANT; i < my_enum::MAX_MEMBERS; i++)
    {
        cout << "Enum value = " << i << endl;
    }

    return 0;
}

我看到生成錯誤如下:

錯誤:沒有為后綴'++'聲明'operator ++(int)'[-fpermissive] for(i = my_enum :: ANT; i <my_enum :: MAX_MEMBERS; i ++)

雖然默認情況下未為枚舉類型定義增量運算符,但是您可以定義自己的運算符,例如:

my_enum& operator++(my_enum& i)
{
    assert(i < my_enum::MAX_MEMBERS);
    i = static_cast<my_enum>(static_cast<int>(i)+1);
    return i;
}

然后,您可以在循環中編寫++ i,它將愉快地進行編譯。

您假設可以將my_enum用作int,但現在它是一種新類型。 因此,需要定義“ ++”運算符和“ <<”運算符才能使此類型起作用。

解決此問題的簡單方法是:

#include <iostream>

using namespace std;

enum class my_enum
{
    ANT,
    BAT,
    CAT,
    DOG,
    EGG,
    FAN,
    MAX_MEMBERS
};

int main( int argc, char * argv[] )
{
    for ( my_enum i = my_enum::ANT; i < my_enum::MAX_MEMBERS;  )
    {
        cout << "Enum value = " << (int)i << endl;
        i = my_enum( (int)i + 1 );
    }

    return 0;
}

但是,通常迭代一個枚舉,典型的代碼是:

#include <iostream>

using namespace std;

enum my_enum
{
    ANT,
    BAT,
    CAT,
    DOG,
    EGG,
    FAN,
    MAX_MEMBERS
};

int main( int argc, char * argv[] )
{
    for ( int i = my_enum::ANT; i < my_enum::MAX_MEMBERS; i++ )
    {
        cout << "Enum value = " << i << endl;
    }

    return 0;
}

暫無
暫無

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

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