簡體   English   中英

C ++中Java枚舉的.values()的等效項

[英]Equivalent of .values() of enum from Java in C++

我首先開始學習用Java編程,因此,在使用枚舉時,我可以使用.values()來生成該特定枚舉中所有值的數組。 我注意到現在學習C ++,沒有等效的方法。

我確信人們已經提出了不錯的解決方法,因此最好的解決方法是什么?

在C ++中執行此操作通常需要枚舉內有特殊的哨兵值或一些預處理器魔術。

如果枚舉數是順序的,則可以使用簡單的哨兵值(在這種情況下為end ):

enum my_enum {
    a,
    b,
    c,
    my_enum_end,
};

for (int i = 0; my_enum_end != i; ++i) {
    // Loop through all of the enum values.
}

當枚舉更加復雜並且每個枚舉器之間存在間隙時,可以使用預處理器:

#define ENUMS(F) F(a, 1) F(b, 5) F(c, 10)
#define AS_ENUM(ID, V) ID = V,
#define AS_VALUE(ID, V) V,
#define AS_ID(ID, V) #ID,

enum my_enum {
    ENUMS(AS_ENUM)
};

my_enum const my_enum_values[] = {ENUMS(AS_VALUE)};
std::string const my_enum_keys[] = {ENUMS(AS_ID)};

for (my_enum const i : my_enum_values) {
    // Loop through all of the enum values.
}
for (auto const& i : my_enum_keys) {
    // Loop through all of the enum keys.
}

在這里,所有枚舉數都是在ENUMS宏中指定的,而不是直接在enum定義中指定的。

暫無
暫無

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

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