如何修复"static assertion failed: template argument not an integral type"错误?
How to fix "static assertion failed: template argument not an integral type" error?
我想生成给定类型(T)的0和最大值之间的任何数字。为 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
将std::uniform_int_distribution<T>
用于任何不同于short
、int
、long
、long long
、unsigned short
、unsigned int
、unsigned long
或unsigned long long
T
都是未定义的行为。
您可能需要考虑std::uniform_real_distribution<T>
。
此外,每个线程有多个生成器通常是一个坏主意。你最好坚持使用对单个的引用。
相关文章:
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- 使用JsonCpp将数据返回到带有pybind11的python会在python调用中产生Symbol not foun
- OpenCV Android C++ imwrite not found
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 使用单词"not"作为C ++类的名称会导致VS2019错误
- 错误"Could not find Boost"(缺少:上下文标头)
- 如何修复"error: ‘_1’ was not declared in this scope"?
- Atom gpp编译器给出"'C:UsersadminUser' is not recognized as an internal or..."错误
- 为什么"an inherited constructor is not a candidate for initialization from an expression of the same or
- "error: subscripted value is not an array, pointer, or vector",我正在使用字符串
- 如何修复"static assertion failed: template argument not an integral type"错误?
- CMAKE CMAKE_C_COMPILER "is not a full path to an existing compiler tool"
- 错误"<url> is not recognized as an internal or external command, operable program or batch file.
- 使用多个文件时"array bound is not an integer constant before ']' token"
- 什么是"a value not associated with an object"?
- 使用枚举类值为数组编制索引时出现"Array subscript is not an integer"错误
- 这句话"a class is an object even if not instantiated"是什么意思?
- 获取错误"array bound is not an integer constant before ']' token"
- 在运行时创建结构时"array bound is not an integer constant"
- 将一个数组中的引用分配给另一个数组 - "warning: target of assignment not really an lvalue"