如何优雅地把所有枚举到一个std ::设为(How to elegantly put all enu

2019-08-17 14:26发布

我有一个枚举,我希望把他们都在集合(然后删除一些与set_intersection算法,但这是offtopic)。 所有的伟大工程,除了林停留在步骤1 :)

如果我有(真正的类具有枚举具有较高的基数)

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

我将如何初始化一个std::set<MyClass::Color>包含所有枚举。
我能明显手动插入他们一个接一个,与铸造循环做,因为他们是连续的,并从0(我想,如果我不使用所需=枚举定义)开始,但林寻找一个更优雅的方式。

编辑:我更喜欢C ++ 03解决方案,如果可能的,因为问题当前实例都需要它,但如果没有C ++ 11是好事,太了解。

Answer 1:

这是一个选项:

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


Answer 2:

使用std::bitset< total_colors > 这是一组在有限空间中的更合适的数据结构。 每种颜色映射到布尔值,表示它是否是该组的一部分。 你可以把它初始化所有true使用的my_bitset.set()



Answer 3:

个人而言,我会使用一个循环,只投的事情,我去。

但是,如果你坚决反对蒙上你可以定义在枚举运营商,所以你可以在他们使用迭代++ 。 这样,你可以循环无铸造。



文章来源: How to elegantly put all enums into a std::set
标签: c++ enums stdset