如何将随机(boost.random)库包装在类中
How to wrap random(boost.random) library in a class?
目前我正在使用 boost 作为随机,但有可能我会将其切换到其他库或我自己的代码(在某些部分),所以我想把它包装在一个类中,然后当我需要一些随机数(或其他东西)时,我会从这个类而不是 boost 本身。问题是 - 我应该怎么做?我应该使这个类成为单例还是静态类或其他东西?
(我想到了一个类,因为我只需要播种一次,但从不同的地方获得功能,我不想在 main.cpp 中播种)
附言如果有一种方法可以在没有类的情况下做到这一点,它也可以。
我建议做一个常规类。这样,用户可以创建一个对象,设置一些参数,然后查询值,如以下示例用例所示:
{
YourRandomGenerator random;
random.SetRange(0, 1000);
for (int i = 0; i < 1000; ++i)
CallUserFunction(random.Next());
}
这种方法将使为不同的分布创建不同的随机生成器成为可能。通过不同的类(YourUniformRandomGenerator,YourGaussDistributedRandomGenerator等)或通过参数化方法(SetUniform,SetGauss等)。如果你只想播种一次(你为什么要这样做?),所有这些生成器类都可以访问同一个静态升压随机生成器。
我应该使这个类成为单例还是静态类或其他东西?
有两种规范的方法可以做到这一点:
- 具有工厂函数的抽象类。
- 痘痘成语。
这两种方法都允许避免在头文件中公开实现。
如果有一种方法可以在没有类的情况下做到这一点,它也可以。
如果没有必须在调用之间保持的状态,则可以使用非内联函数。
相关文章:
- 如何在c++17中制作一个模板包装器/装饰器
- std::vector的包装器,使数组的结构看起来像结构的数组
- 如何在c++迭代器类型中包装std::chrono
- 是否可以用"iostream"包装现有的TCP/OOpenSSL会话
- 用pybind11包装C++抽象类时出错
- 为左值和右值的包装器实现C++范围
- C结构,其指针将被包装在unique_ptr中
- 如何包装第三方DLL在R中使用
- 在类型和包装器之间reinterpret_cast是否安全<Type>?
- 将 N-arg 函数包装到另一个函数中
- 元组由 Swig 生成的 Python 包装器返回,用于C++向量
- 包装一个对象并假装它是一个 int
- 使用 Python Extension API 包装复杂C++类
- 外壳包装器句柄/执行交互式命令管道C++ UNIX
- 包装C++类时不完整的类型 GLFWwindow
- 将函数包装器转换为 std::function
- C++函数包装器来捕获某些信号
- <random>在实践中应该实际使用哪个随机数引擎? std::mt19937?
- 创建包装升压适配器的自定义范围类
- 如何将随机(boost.random)库包装在类中