c++ - 如何优雅地将所有枚举放入 std::set

标签 c++ enums stdset

我有一个枚举,我想将它们全部放入集合中(然后使用 set_intersection 算法删除一些,但这是题外话)。 除了我卡在第 1 步之外,一切都很好。:)

如果我有(真实类具有更高基数的枚举)

class MyClass
{
enum Color{red, green , blue}
};

我将如何初始化 std::set<MyClass::Color>包含所有枚举。
我显然可以一个接一个地手动插入它们,做一个带强制转换的 for 循环,因为它们是连续的并且从 0 开始(我认为如果我不在枚举定义中使用 = 则这是必需的),但我正在寻找一种更优雅的方式。

编辑:如果可能的话,我更喜欢 C++03 解决方案,因为当前的问题实例需要它,但如果不是,C++11 也很好知道。

最佳答案

这是一个选项:

#define COLORS {red, green , blue}
enum Color COLORS;
static std::set<Color> color_set() {
    return COLORS;
}
#undef COLORS

关于c++ - 如何优雅地将所有枚举放入 std::set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15411519/

相关文章:

c++ - 调用另一个翻译单元中专门的功能模板

C++ - 结构...函数参数问题

f# - 在 F# 中将字节转换为枚举的实例

c++ - 如果 int 是 "not within the enums range",为什么将其转换为强类型枚举会编译?

c++ - 为什么在取消引用 std::set<T>::iterator 时需要 const?

c++ - 具有个人比较功能的 std::set 具有相同的值

c++ - 连接/合并/加入两个 AVL 树

python - 我什么时候应该继承 EnumMeta 而不是 Enum?

c++ - 使用 lambda 表达式作为 std::set 的比较,当它在 vector 中时

c++ - OpenCV : Assertion failed using one of the two constructors of SIFT