现在我正在使用boost的随机库生成一个随机枚举器。基本上我使用隐式转换来指定随机生成器的分布,获取一个随机数,然后将其转换回枚举类型。
Ex :( minColor和maxColor是枚举类型的参数)
boost::mt19937 randGen(std::time(0));
boost::uniform_int<> dist(minColor, maxColor);
boost::variate_generator< boost::mt19937&, boost::uniform_int<> >
GetRand(randGen, dist);
return static_cast<Common::Color> (GetRand());
我很好奇boost的库是否支持为枚举类型创建分布,从而返回随机选择的枚举器。有点像...
boost::uniform<Common::Color> dist(minColor, maxColor);
答案 0 :(得分:0)
虽然使用C ++ 0x强类型枚举是有意义的,但你通常不可能做到这一点。
枚举术语区分枚举类型及其基础类型,它包含枚举值。
该标准主要要求底层类型足够大以容纳所有值,如果可能的话,不要大于int
,并且返回sizeof(someEnum)
的大小等于其基础类型的大小(第7.2节)。 5 C ++ 03)。
只考虑到这一点,并且不限制枚举的使用/声明方式,我们知道枚举的大小,但不知道它们的签名,这使得例如定义类型安全的构造函数,无法使用 min 和 max 参数。
旁注:
我个人也会发现一个用枚举类型模板化的分布有点误导
是否仅为范围内的枚举值定义分布?
或者它是否为基础类型中范围内的所有值定义?