【问题标题】:Boost::Random and Enumerated TypesBoost::Random 和枚举类型
【发布时间】:2009-11-22 22:31:19
【问题描述】:

现在我正在使用 boost 的随机库生成一个随机枚举器。基本上我使用隐式转换来指定随机生成器的分布,获取一个随机数,然后将其转换回枚举类型。

例如:(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);

【问题讨论】:

    标签: c++ boost enums


    【解决方案1】:

    虽然它对 C++0xs 强类型枚举有意义,但通常不可能实现。

    枚举术语区分枚举类型及其保存枚举值的基础类型
    该标准主要要求底层类型足够大以容纳所有值,如果可能,不要像 int 那样大,并且 sizeof(someEnum) 返回的大小等于其底层类型的大小(§7.2.5 C++ 03).

    仅考虑到这一点并且不限制枚举的使用/声明方式,我们知道枚举的大小但不知道它们的符号,这使得例如定义带 minmax 参数的类型安全构造函数是不可能的。

    旁注:
    我个人还会发现一个以枚举类型为模板的发行版有点误导。
    分布是否仅针对范围内的枚举值定义?
    还是为范围内的基础类型中的所有值定义了它?

    【讨论】:

      猜你喜欢
      • 2021-11-21
      • 2017-03-11
      • 1970-01-01
      • 2012-09-16
      • 2016-01-17
      • 1970-01-01
      • 2018-10-18
      • 2017-01-14
      • 1970-01-01
      相关资源
      最近更新 更多