Boost ::随机和枚举类型

时间:2009-11-22 22:31:19

标签: c++ boost enums

现在我正在使用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);

1 个答案:

答案 0 :(得分:0)

虽然使用C ++ 0x强类型枚举是有意义的,但你通常不可能做到这一点。

枚举术语区分枚举类型及其基础类型,它包含枚举值。
该标准主要要求底层类型足够大以容纳所有值,如果可能的话,不要大于int,并且返回sizeof(someEnum)的大小等于其基础类型的大小(第7.2节)。 5 C ++ 03)。

只考虑到这一点,并且不限制枚举的使用/声明方式,我们知道枚举的大小,但不知道它们的签名,这使得例如定义类型安全的构造函数,无法使用 min max 参数。

旁注:
我个人也会发现一个用枚举类型模板化的分布有点误导 是否仅为范围内的枚举值定义分布?
或者它是否为基础类型中范围内的所有值定义?