我想生成介于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>();
}
这是我得到的输入和输出示例:
输入:
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
答案 0 :(得分:1)
对于任何与以下内容不同的std::uniform_int_distribution<T>
使用T
是不确定的行为:short
,int
,long
,{ {1}},long long
,unsigned short
,unsigned int
或unsigned long
。
您可能要考虑使用std::uniform_real_distribution<T>
。
此外,每个线程具有多个 generator 通常是一个坏主意。您最好坚持使用对单个引用的引用。