gpt4 book ai didi

c++ - C++ 枚举中的数组

转载 作者:行者123 更新时间:2023-11-28 01:41:21 32 4
gpt4 key购买 nike

目前我的 C++ 代码是:

constexpr struct my_codes {
std::array<int, other_class1::static_constans1> num1 = {{0, 1, 2, 3, 4, 5, 6}};
std::array<int, other_class2::staric_constans2> num2 = {{7, 8, 9, 10, 11, 12, 13, 14}};
int num3 = 15;
} my_codes;

显然我对此感到难过,而且它已经失控了(我已经输入了前 100 个数字)。遗憾的是,这些枚举是非法的:

enum my_codes {
num1[other_class1::static_constans1],
num2[other_class2::staric_constans2],
num3
};
enum my_codes {num1[7], num2[8], num3};

我可以通过某种魔法在枚举中使用数组吗?我可以使用任何宏吗?一些递归模板?

编辑:我会像这样使用它:

enum my_codes {num1[7], num2[8], num[3]};
if (some_int == my_codes::num2[3]) do_somethig();

枚举将具有这些值:

my_codes::num1[0] == 0
my_codes::num1[1] == 1
...
my_codes::num1[6] == 6
my_codes::num2[0] == 7
my_codes::num2[1] == 8
...
my_codes::num2[7] == 14
my_codes::num3 == 15

最佳答案

由于您的常量是连续的,因此您不需要数组 - 范围检查操作就足够了。也就是说,由于num1包含[0, 7)num2包含[7, 15),你的结构可以表示为

 constexpr struct my_codes {
std::array<int,4> num = {{0,7,14,15}}
} mycodes;

constexpr int getIndex(int i, int offset = 0) {
return (offset==3 || i < mycodes.num[offset+1]) ?
offset :
getIndex(i, offset+1) ;
}

这只是一种通过 constexpr 数组编写线性搜索的递归方式。生成第 i 个范围更简单,它只是 num[i]num[i+1]

关于c++ - C++ 枚举中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47005888/

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