Static members confuse me sometimes. I understand how to initialize a simple built in type such as int
with something along the lines of int myClass::statVar
Just write a function which returns a reference to a properly randomized RandomGenerator and turn itsGenerator into a reference to a generator:
class myClass
{
public:
// Some methods...
protected:
// make this a reference to the real generator
static RandomGenerator& itsGenerator;
public:
static RandomGenerator& make_a_generator()
{
RandomGenerator *g=0;
g=new RandomGenerator();
g->Randomize();
return *g;
}
}
RandomGenerator& myClass::itsGenerator=myClass::make_a_generator();
You could create wrapper class which will hold RandomGenerator
instance in it and will call RandomGenerator::Randomize
in its constructor.
Is it only a one function that needs RandomGenerator? You may do this in this way:
int myClass::foo() { static RandomGenerator itsGenerator = RandomGenerator::Randomize() ... }
Put it in a private field, expose a static accessor. In the accessor, if the member is not yet initialized, initialize it.
If only myClass
needs the RandomGenerator
, then:
myClass::myClass()
{
itsGenerator.Randomize();
}
Does it matter if you re-randomize your random generator for each object? I'm assuming no ;-)
If RandomGenerator
is copyable, you can use a helper function for initialization:
RandomGenerator init_rg() {
RandomGenerator rg;
rg.Randomize();
return rg;
}
RandomGenerator myClass::itsGenerator = init_rg();