Я хочу сгенерировать любое число от 0 до максимального значения данного типа (T). Нет проблем с генерацией чисел для int, short, long и т. Д., Но я не могу сделать это для float и double. Я получаю эту ошибку: «статическое утверждение не выполнено: аргумент шаблона не является целочисленным типом».
Мой код:
#include <iostream>
#include <limits>
#include <random>
template<class T>
T questGenerator()
{
std::random_device rd;
std::default_random_engine generator(rd());
std::uniform_int_distribution<T> distribution(0, std::numeric_limits<T>::max());
return distribution(generator);
}
int main()
{
std::cout << questGenerator<float>();
}
Это пример ввода и вывода, который мне был дан:
input:
std::cout << generateQuest<short>() << std::endl;
std::cout << generateQuest<short>() << std::endl;
std::cout << (short)generateQuest<char>() << std::endl;
std::cout << (short)generateQuest<char>() << std::endl;
std::cout << generateQuest<float>() << std::endl;
std::cout << generateQuest<float>() << std::endl;
Выход:
10105
5332
52
110
3.39889e+38
2.7026e+38