如何在类中包装随机(boost.random)库?

时间:2012-10-02 08:47:22

标签: c++ boost random wrapper

目前我正在使用boost随机,但我有可能将其切换到其他库或我自己的代码(在某些部分),所以我想将它包装在一个类内,然后当我需要一些随机数字(或其他)我将从这个类而不是提升本身。问题是 - 我该怎么做?我应该让这个班级成为单身人士还是静态班级或其他什么? (我想到了一个课,因为我只需要播种一次,但是从不同的地方获取功能,我不想在main.cpp中播种)

P.S。如果有一种方法可以在没有课程的情况下进行,那么它也可以。

2 个答案:

答案 0 :(得分:1)

我建议定期上课。这样,用户可以创建对象,设置一些参数,然后查询值,如本例中的用例:

{
    YourRandomGenerator random;
    random.SetRange(0, 1000);
    for (int i = 0; i < 1000; ++i)
        CallUserFunction(random.Next());
}

这种方法可以为不同的分布创建不同的随机生成器。通过不同的类(YourUniformRandomGenerator,YourGaussDistributedRandomGenerator,...)或通过参数化方法(SetUniform,SetGauss,...)。如果你只想播种一次(你为什么要这样做?),所有这些生成器类都可以访问相同的静态boost随机生成器。

答案 1 :(得分:0)

  

我应该让这个类成为单例还是静态类还是别的什么?

有两种规范方法:

  • 具有工厂功能的抽象类。
  • Pimpl成语。

这两种方法都允许避免在头文件中公开实现。

  

如果有一种方法可以在没有课程的情况下进行,那么它也可以。

如果没有必须在两次通话之间保持状态,你可以使用非内联函数。