2015-05-14 10 views
5

In dem unten angegebenen Code möchte ich ein Flag (oder etwas Ähnliches) implementieren, das den gleichen Effekt hat wie die lokale lokale Einstellung und die globale Einstellung einige Male (dies ergibt zwei unterschiedliche Zahlen in diesem (Beispiel) und die lokale Einstellung zu anderen Zeiten (in diesem Beispiel ergeben sich zwei identische Zahlen).Wie wechsle ich zwischen lokalen und globalen Einstellungen für den Anfangszustand eines C++ 11 RNG?

Ich habe die offensichtlichen "wenn" und "Schalter" Strukturen ohne Erfolg versucht.

#include <iostream> 
#include <random> 

void print(); 

std::seed_seq seed{1, 2, 3, 4, 5}; 
std::mt19937 rng(seed); // *global* initial state 
std::uniform_real_distribution<> rand01(0, 1); 

int main() 
{ 
    print(); 
    print(); 

    return 0; 
} 

void print() 
{ 
    std::mt19937 rng(seed); // *local* initial state 
    std::cout << rand01(rng) << std::endl; 
} 
+0

Können Sie bitte zeigen, * wie * Sie versucht haben, z. 'if' oder' switch'? –

Antwort

5

Verwenden Sie eine ternären und Referenz:

std::mt19937& ref = flag ? rng : local; 

Hier flag die Bedingung zu testen, ist rng das "global" random-Objekt, und local ist, desto mehr lokalisiert ein .

einen Verweis auf das Ergebnis einer ternären Bindung ist syntaktisch gültig: Sie kann es nicht eine if Anweisung, oder ähnlich wie diejenigen sind nicht Ausdrücke des richtigen Typs.

Verwenden Sie ab diesem Punkt ref. Dies gilt solange, wie rng und local im Geltungsbereich bleiben.

+0

danke @Bathsheba. – PeteL

Verwandte Themen