discrete_distribution<>
не может принимать простой аргумент double*
, потому что он не мог бы узнать, как долго массив находится.
Вместо этого требуется диапазон итераторов, но вам нужно указать количество элементов в вашем массиве:
boost::random::discrete_distribution<>* distribution(double const* distr,
std::ptrdiff_t count)
{
return new boost::random::discrete_distribution<>(distr, distr + count);
}
Как обычно, это совершенно ясно указано в документации .