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;
}
Use a ternary and a reference:
Here,
flagis the condition to test,rngis the "global" random object, andlocalis the more localised one.Binding a reference to the result of a ternary is syntactically valid: you can't do it using an
ifstatement, or similar as those are not expressions of the correct type.From that point, use
ref. This will be valid so long asrngandlocalremain in scope.