C++函数返回(uniform_int_distribution)的内容

5
我创建了这个随机数类,以便在需要时在我的游戏引擎中使用随机数,但是我在函数方面遇到了问题,我该如何返回 R?(请记住我完全是新手)
#pragma once
#include <ctime>
#include <random>

using namespace std;

class Random
{
private:


public:
    Random() { default_random_engine RandomNumber(time(0));};

    int RandomNumber()
    {
        uniform_int_distribution<int> R();
         return = R;
    }

    float RandomFloat()
    {
        uniform_int_distribution<float> R();
    }

    int RandomNumberRange(int Min =0,int Max =0)
    {
        uniform_int_distribution<int> R(Min,Max);
    }

    float RandomFloatRange(float Min = 0, float Max = 0)
    {
        uniform_int_distribution<float> R(Min,Max);
    }}; 
2个回答

4
随机数引擎应该被重用,但是当前您正在将其声明为局部变量,它在构造函数退出时被销毁并且再也没有使用。相反,将default_random_engine作为类的成员。

然后,要从分布中获取实际随机数,需要通过其重载的调用运算符调用它,并传递随机数引擎:
class Random
{
private:
    default_random_engine RandomNumber{time(0)};

public:

    int RandomNumberRange(int Min =0,int Max =0)
    {
        return uniform_int_distribution<int>{Min,Max}(RandomNumber);
    }

    //...
};

没有必要返回分布本身,所以我根据自己的理解回答了你的问题。

还要注意使用 time(0) 进行种子处理可能会导致问题。但这是一个非常庞大的主题。特别是,如果您短时间内创建多个 Random 类的实例,它们将被同等地进行种子处理。相反,

default_random_engine RandomNumber{std::random_device{}()};

可能会更好。它可能使用系统提供的随机数。(但例如较旧版本的MinGW会通过这种方式生成确定性结果。)


谢谢您的帮助,但是我如何在不使用范围的情况下返回它?我尝试了这个:return uniform_int_distribution<int> (RandomNumber); 但似乎不起作用。 - Dissoantn Void
1
@VoIdProduction 你不能省略大括号:return uniform_int_distribution<int>{}(RandomNumber); - walnut

1
    int RandomNumber()
    {
        uniform_int_distribution<int> R();
        return = R;
    }

以上函数中返回类型和R的类型不同。 R的类型是uniform_int_distribution<int>,而返回类型只是int。 要返回R(),您需要更改函数返回类型。

    uniform_int_distribution<int> RandomNumber()
    {
        uniform_int_distribution<int> R;
        return R;
    }

请注意,不是return = Rreturn是一个关键字,而不是您可以分配的变量。要返回一个变量,只需使用return R;

它给了我一个错误: 错误(活动)E0415不存在适合的构造函数,可以将“std :: uniform_int_distribution <int>()”转换为“std :: uniform_int_distribution <int>” - Dissoantn Void
请注意修改代码中的uniform_int_distribution<int> R()uniform_int_distribution<int> R,否则会出现“棘手的解析”问题。 - aep

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接