В моем проекте я хочу иметь какие-то вспомогательные функции / классы для работы с генератором случайных чисел. Главная тема c проекта - симуляции Монте-Карло, поэтому я буду использовать ее очень часто и во многих местах. Следовательно, я ищу идеи создания такой оболочки на случайной библиотеке C ++, чтобы я мог рандомизировать, например, вероятность, вызывая простую функцию generateProbability()
. Я пришел с 2 идеями, одна просто класс с необходимыми функциями. Это решение выглядит неплохо, однако мне нужно было бы создавать отдельные объекты RNG внутри каждого файла / места, где это необходимо. Другое решение - просто создать отдельное пространство имен с глобальными переменными псевдослучайного движка, распределений и вспомогательных функций. Я подготовил пример кода для обоих случаев:
#pragma once
#include <random>
namespace rng {
std::mt19937_64 rng_engine(std::random_device{}());
std::uniform_int_distribution<uint8_t> zeroToNineDistrib(0, 9);
inline auto generateNumber() { return zeroToNineDistrib(rng_engine); }
} // namespace rng
class RNG {
public:
RNG() : rng_engine(std::random_device{}()), zeroToNineDistrib(0, 9){};
~RNG() = default;
auto generateNumber() { return zeroToNineDistrib(rng_engine); }
private:
std::mt19937_64 rng_engine;
std::uniform_int_distribution<uint8_t> zeroToNineDistrib;
};
Что вы думаете об этих решениях? Какой из них «лучше» таким образом, что он более профессиональный и считается «чище»? Или, может быть, у вас есть другие идеи о том, как сделать это лучше?
Я призываю вас к обсуждению, потому что я вижу плюсы и минусы любого решения и не могу решить, какой из них выбрать.