Передача boost :: генератора случайных чисел в качестве параметра функции

Я хотел бы передать boost::random объект генератора чисел к функции. Я написал эту небольшую программу, чтобы проверить, правильно ли я это делаю:

#include <cstdlib>
#include <iostream>

#include <exception>

#include <boost/random.hpp>
#include <boost/random/random_device.hpp>// ---------- function declarations ----------
void print_random_num(boost::random::uniform_int_distribution<unsigned long> &gen, boost::random::mt19937 &rng);// ---------- main ----------
int main()
{
try
{
boost::random::random_device seeder;
boost::random::mt19937 rng(seeder());
boost::random::uniform_int_distribution<unsigned long> gen(100,200);

std::cout << "in main:\n";
for (int c = 0; c < 10; c++)
std::cout << gen(rng) << "\n";

print_random_num(gen,rng);

std::cout << "\nback in main:\n";
for (int c = 0; c < 10; c++)
std::cout << gen(rng) << "\n";
}
catch (std::exception &e)
{
std::cout << "error encountered: " << e.what() << "\n";
}

return EXIT_SUCCESS;
}// ---------- function definitions ----------
void print_random_num(boost::random::uniform_int_distribution<unsigned long> &gen, boost::random::mt19937 &rng)
{
try
{
std::cout << "\nin function:\n";
for (int c = 0; c < 10; c++)
std::cout << gen(rng) << "\n";
}
catch (std::exception &e)
{
throw;
}
}

Выходные данные программы предполагают, что это работает, но просто видение случайных чисел в выводе не обязательно означает, что это действительно работает. Итак, у меня есть два вопроса:

  1. Способ, показанный здесь в тестовой программе, т. Е. Как ссылка, правильный путь для прохождения генератора rng и объект распределения gen чтобы непрерывно генерировать случайные числа по всей программе?

  2. Если бы я хотел создать так же числа внутри функции print_ran_num а также после функция вышла, достаточно ли просто передать генератор по значению, т.е. изменить сигнатуру функции на void print_random_num(boost::random::uniform_int_distribution<unsigned long> &gen, boost::random::mt19937 rng)? Опять же, вывод в этом случае предполагает, что это будет работать правильно.

У меня сложилось впечатление, что я когда-то видел пример, демонстрирующий это в документация для Boost.Random, но я больше не мог его найти.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …