Простите, если это уже обсуждалось.У меня есть функция шаблона, которая использует boost ::iform_int и boost ::iform_real в зависимости от аргумента шаблона и должна возвращать тот же тип:
template <typename N> N getRandom(int min, int max)
{
timeval t;
gettimeofday(&t,NULL);
boost::mt19937 seed((int)t.tv_sec);
boost::uniform_int<> dist(min, max);
boost::variate_generator<boost::mt19937&, boost::uniform_int<> > random(seed, dist);
return random();
}
//! partial specialization for real numbers
template <typename N> N getRandom(N min, N max)
{
timeval t;
gettimeofday(&t,NULL);
boost::mt19937 seed( (int)t.tv_sec );
boost::uniform_real<> dist(min,max);
boost::variate_generator<boost::mt19937&, boost::uniform_real<> > random(seed,dist);
return random();
}
Теперь я протестировал функцию с помощью int, floatи удваивается.Он отлично работает с int, отлично работает с double, но он не работает с числами с плавающей точкой.Это как если бы он либо переводил float как int, либо возникла какая-то проблема приведения.Причина, по которой я говорю это потому, что когда я делаю:
float y = getRandom<float>(0.0,5.0);
, я всегда получаю int обратно.Однако, как я уже сказал, он работает с двойными.Есть ли что-то, что я делаю неправильно или отсутствует?Спасибо!