Предполагается, что механизм случайных чисел используется повторно, но в настоящее время вы объявляете его как локальную переменную, которая больше никогда не используется и уничтожается при выходе из конструктора. Вместо этого сделайте default_random_engine
членом вашего класса.
Затем, чтобы получить фактическое случайное число из распределения, вам нужно вызвать его через перегруженный оператор вызова и передать его механизму случайных чисел:
class Random
{
private:
default_random_engine RandomNumber{time(0)};
public:
int RandomNumberRange(int Min =0,int Max =0)
{
return uniform_int_distribution<int>{Min,Max}(RandomNumber);
}
//...
};
Нет никаких причин возвращать сам дистрибутив. Поэтому я истолковал ваш вопрос таким образом, что, вероятно, имеет больше смысла.
Также обратите внимание, что засев с time(0)
, вероятно, плохой. Но это огромный топи c сам по себе. В частности, если вы случайно создадите несколько экземпляров класса Random
, они будут одинаково заполнены. Вместо этого
default_random_engine RandomNumber{std::random_device{}()};
может работать лучше. вероятно будет использовать случайные числа, предоставленные системой. (Но это не так, например, более старые версии MinGW действительно генерировали детерминированные c результаты таким образом.)