Hogy tudok random számot generálni c++ban ilyen módon?
Találtam egy random engine-t, ezt a biztos mt19337 engine-t.
A kérdésem az, ha egy osztálynak van egy függvénye, ami számít generál akkor, ha így csinálom:
int Dice::Rolling(){
mt19337 generator(time(0));
uniform _int_generator<int>Dice roll(1,6);
int roll = Dice roll(generator);
return roll;
}
Észrevettem, hogy akárhányszor meghívom ezt a függvénye mindig ugyanaz okay a számokat generál.
Talán azért, mert az mt19337 az mindig meghívódik. Viszont azt nem tehetem, hogy máshol hívom még, mert akkor kiírja, hogy a generator nincs deklarálva. Az osztály headerben, ha deklarálom adattagként akkor, ha így csinálom:
class Dice{
......
mt19337 generator(time(0));
......
}
Akkor olyan hibáztatni dob ki, amit nemtudok értelmezni. Majd mindjárt leírom azt is.
Szerintetek mi a megoldás?
Itt inkább alapvető C++-os hiányosságok vannak szerintem.
A függvénykönyvtárat nem ismerem, de elég furcsa nekem ez a kód, nem is értem hogyan fordul le.
Ez például micsoda?
int roll = Dice roll(generator);
Egyébként egyszerű kockadobások generálásához miért nem elég egy sima C-s rand() ?
Valami ilyesmi:
int Dice::Rolling(){
static mt19337 generator(random_device{}());
uniform_int_distribution<int> Dice(1,6);
return Dice(generator);
}
Nem thread-safe, ha azzá akarod tenni egyszerűen, akkor static mellé mehet a thread_local.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!