What's wrong with such initialization being in the constructor
of the relevant NormalEngine? I think that was your original
idea, and I derailed it because of my misunderstanding of what
you wanted to initialize.
The problem is that structs can't have constructors with no
parameters.
In general the idea is that the engine should be something
hidden; where you need to use it, you just need to pass the
name as a template parameter; it should be rare that you really
need to manually instantiate your own engine. But we can add
such a helper function if you like.
I agree that those helper functions are not very important, but
on the other hand I don't think adding them costs us anything.
But maybe we should take care of the other stuff first.
What I'm frustrated about is that as-is it's not possible to
just have
auto nrng = Normal(mean, sigma);
... but you have instead to write,
auto nrng = Normal!()(mean, sigma);
despite the fact that Normal has default template parameters
given. So maybe a helper function normalRNG which returns an
instance of Normal would also be helpful.
Yes, I think it would be.
I've uploaded a tweaked version based on your comments here:
https://github.com/WebDrake/phobos/tree/normal
... so feel free to pull, further revise and add in your
Ziggurat implementation :-)
I'll add the Zigggurat implementation, probably tomorrow.