如何将枚举本身作为数组
How to have an enum itself as an array
我有一个enum,但我想让enum本身作为一个数组,我可以作为一个列表遍历:
#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开始顺序。只要知道整数值在边界内,就可以简单地将索引值赋给枚举类型的变量。但是,输出将只反映整数本身,而不是符号符号。
如果您愿意使用X宏,您可以轻松地从单个状态列表创建并行数据结构。其中一个数据结构可以是数组。
#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';
如果您试图使用枚举作为标志,您可以指定每个枚举数的基础值,以便能够在位操作符的帮助下将它们用作标志集:
enum permission
{
ReadPermission = 1,
WritePermission = 2,
ExecutePermission = 4,
// etc.
FullPermissions = ReadPermissions | WritePermissions | ExecutePermission
};
bool hasReadPermission(permission P)
{
return P & ReadPermission;
}
bool hasWritePermission(permission P)
{
return P & WritePermission;
}
void addReadPermission(permission& P)
{
P |= ReadPermission;
}
void removeReadPermission(permission& P)
{
P &= ~ReadPermission;
}
…
int MyPermissions = FullPermissions;
assert(hasReadPermission(MyPermissions));
assert(hasWritePermission(MyPermissions));
removeReadPermission(MyPermissions);
assert(!hasReadPermission(MyPermissions));
相关文章:
- 带有枚举方向/类型的气泡排序结构数组
- C++ 指向枚举数组的指针
- 生成整数长度的枚举数组
- C++如何将字符串数组中的一个点设置为枚举变量
- 如何从枚举类值中指定模板函数参数中的数组大小?
- 初始化枚举类 (C++11) 类型的二维 std::数组
- 如何递归枚举每个元素都有上限的所有可能的数组
- 从数组中删除枚举并计算总和
- 如何有效地用枚举填充 2D std::数组
- 数组枚举和输入
- 随机生成一个没有重复元素的枚举数组 (C++)
- 地址数组,带有枚举的返回值
- 错误:数组大小表达式必须具有整型或无作用域枚举类型,而不是'double'
- C++ 中的枚举中的数组
- 枚举与数组
- 枚举数组相对于常量和宏的优势
- 传递枚举数组是什么意思
- 枚举数组错误之前的预期主表达式
- 如何使用枚举初始化向量/数组
- 使用固定值枚举数的枚举零初始化