作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个枚举,但我打算将枚举本身作为一个数组,我可以将其作为列表遍历:
#include <iostream>
using namespace std;
typedef enum p_states {
ALL,
SEMI,
COMBO1,
}states;
states s;
int main()
{
s = ALL;
cout<<s[0]<<endl;
cout<<s[1]<<endl;
cout<<s[2]<<endl;
}
导致错误的原因:
enum_states.cpp: In function ‘int main()’:
enum_states.cpp:12:11: error: invalid types ‘states {aka p_states}[int]’ for array subscript
cout<<s[0]<<endl;
^
enum_states.cpp:13:11: error: invalid types ‘states {aka p_states}[int]’ for array subscript
cout<<s[1]<<endl;
^
enum_states.cpp:14:11: error: invalid types ‘states {aka p_states}[int]’ for array subscript
cout<<s[2]<<endl;
^
我只能想到有一个状态数组。
s[3] = {ALL,SEMI,COMBO1};
是否有更好的方法来仅定义一次并将其作为枚举?
最佳答案
您不能将 enum
视为数组。在你的情况下,没有必要。您的枚举是从 0 开始连续的。只要您知道您的整数值在范围内,您就可以简单地将索引值分配给您的枚举类型的变量。然而,输出只会反射(reflect)整数本身,而不是符号。
如果你愿意用 X macros ,您可以轻松地从单个状态列表创建并行数据结构。其中一种数据结构可以是数组。
#define P_STATES_X \
X(ALL) \
X(SEMI) \
X(COMBO1)
enum p_states {
#define X(E) E,
P_STATES_X
#undef X
P_STATES_MAX
};
std::string p_states_strings[] = {
#define X(E) #E,
P_STATES_X
#undef X
};
//...
for (int i = 0; i < P_STATES_MAX; ++i)
std::cout << p_states_strings[i] << '\n';
关于c++ - 如何将枚举本身作为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32020168/
我是一名优秀的程序员,十分优秀!