jeudi 14 mai 2015

How do I switch between local and global settings for the initial state of a C++11 RNG?

In the code given below, I would like to implement a flag (or something equally simple) that has the same effect as commenting out the local setting and using the global setting some times (yielding two different numbers in this example), and using the local setting at other times (yielding two identical numbers in this example).

I have tried the obvious "if" and "switch" structures without success.

#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;
}

Aucun commentaire:

Enregistrer un commentaire