有没有办法在不知道C++大小的情况下迭代枚举
你好,我有以下枚举
enum params_Solver {
params_Solver_Lorem,
params_Solver_Ipsum,
params_Solver_Simply,
params_Solver_Dummy,
params_Solver_Test,
params_Solver_Typesetting,
params_Solver_Industry,
params_Solver_Scrambled
};
我想要做的是尝试做这样的伪代码:
for (auto enum_member: params_Solver)
{
print(index, enum_member); // output looks like this: "0, params_Solver_Lorem", "1, params_Solver_Ipsum" etc
}
有没有办法实现这一目标?
编辑:我无法控制枚举。此枚举由来自第 3 部分库的不同文件提供。我可能可以复制它但不能更改原始枚举。我想将枚举库的成员写入不同的文件。
回答
不。至少不是直接的。枚举实际上不是一组常量。相反,它们是一种带有一组命名常量的类型。区别在于:例如42是一个完全有效的值params_Solver,它只是没有名称。
启用迭代的常用方法是添加标记值:
enum params_Solver {
params_Solver_Lorem,
params_Solver_Ipsum,
params_Solver_Simply,
params_Solver_Dummy,
params_Solver_Test,
params_Solver_Typesetting,
params_Solver_Industry,
params_Solver_Scrambled,
num_params_Solver // <----
};
然后从0直到迭代num_params_Solver。好消息是您可以添加另一个常量并且num_params_Solver仍然是正确的。限制是它只适用于没有自定义值的枚举。