首页 > 解决方案 > 有没有办法在不知道 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 部分库不同的文件提供。我可能可以复制它,但不能更改原始枚举。我想将枚举库的成员写入不同的文件。

标签: c++c++11

解决方案


不,至少不是直接的。枚举实际上不是一组常量。相反,它们是一种带有一组命名常量的类型。区别在于:例如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然后从until迭代num_params_Solver。好消息是您可以添加另一个常量并且num_params_Solver仍然是正确的。限制是它仅适用于没有自定义值的枚举。


推荐阅读