gpt4 book ai didi

c++ - 等价于 C++ 中来自 Java 的枚举的 .values()

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:23:37 25 4
gpt4 key购买 nike

我最初学习用 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 定义中指定。

关于c++ - 等价于 C++ 中来自 Java 的枚举的 .values(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22380610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com