如何解决如何迭代枚举?
典型的方式如下:
enum Foo {
One,
Two,
Three,
Last
};
for ( int fooInt = One; fooInt != Last; fooInt++ )
{
Foo foo = static_cast<Foo>(fooInt);
// ...
}
请注意,枚举Last
意味着被迭代跳过。利用这个“假”Last
枚举,您不必在每次想要添加新枚举时将 for
循环中的终止条件更新为最后一个“真实”枚举。如果您想稍后添加更多枚举,只需在 Last 之前添加它们。此示例中的循环仍然有效。
当然,如果指定了枚举值,这将失效:
enum Foo {
One = 1,
Two = 9,
Three = 4,
Last
};
这说明枚举并不是真的要迭代。处理枚举的典型方法是在 switch 语句中使用它。
switch ( foo )
{
case One:
// ..
break;
case Two: // intentional fall-through
case Three:
// ..
break;
case Four:
// ..
break;
default:
assert( ! "Invalid Foo enum value" );
break;
}
如果您真的想枚举,请将枚举值填充到向量中并对其进行迭代。这也将正确处理指定的枚举值。
解决方法
我刚刚注意到您不能在enum
诸如++
或上使用标准数学运算符+=
。
那么遍历 C++ 中所有值的最佳方法是什么enum
?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。