有没有办法在不知道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仍然是正确的。限制是它只适用于没有自定义值的枚举。


以上是有没有办法在不知道C++大小的情况下迭代枚举的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>