[英]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.