c++ - 有没有办法在不知道 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
然后从until迭代num_params_Solver
。好消息是您可以添加另一个常量并且num_params_Solver
仍然是正确的。限制是它仅适用于没有自定义值的枚举。
推荐阅读
- ios - SwiftUI:仅更改 UITableViewAppearance 的一个实例
- javascript - 使用 React Context Hook API 从 firestore 获取实时数据
- php - 服务器无法使用从数据库收集的信息访问本地文件
- python - 为什么 keras model.fit 和 sample_weight 初始化时间长?
- sql - 数据库父关系到子关系问题
- java - 从字符串中删除特殊符号
- java - JavaKerberos 在连接到 MS SQL DB 时未使用提供的用户名和密码
- c# - 可以拦截异步方法并覆盖 ReturnValue?
- spring-boot - 失败:(ID:838926df)没有找到任何带有Main-Class清单条目的jar文件
- reactjs - 我应该使用 useState 还是 setState?