如何解决“静态断言失败:模板参数不是整数类型”错误?

时间:2019-01-11 01:01:25

标签: c++ random numbers

我想生成介于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

1 个答案:

答案 0 :(得分:1)

对于任何与以下内容不同的std::uniform_int_distribution<T>使用T不确定的行为shortintlong,{ {1}},long longunsigned shortunsigned intunsigned long

您可能要考虑使用std::uniform_real_distribution<T>

此外,每个线程具有多个 generator 通常是一个坏主意。您最好坚持使用对单个引用的引用。