簡體   English   中英

C++ 從函數返回 (uniform_int_distribution)

[英]C++ Return (uniform_int_distribution) from a function

我創建了這個隨機類,這樣我就可以在需要時在游戲引擎中使用隨機數,但是我遇到了函數問題,我想如何返回 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);
    }}; 

隨機數引擎應該被重用,但目前你將它聲明為一個局部變量,當構造函數退出時它永遠不會被再次使用和銷毀。 相反,讓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 確實以這種方式生成了確定性結果。)

    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 = R return是一個關鍵字,而不是一個可以賦值的變量。 要返回一個變量只需使用return R; .

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM