Skip to content

Instantly share code, notes, and snippets.

@deque-blog
Last active April 19, 2017 09:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save deque-blog/a7bffe9af1eece888889c3ad25cbb796 to your computer and use it in GitHub Desktop.
Save deque-blog/a7bffe9af1eece888889c3ad25cbb796 to your computer and use it in GitHub Desktop.
template<typename Finalizer, typename Generator, typename... Generators>
auto one_of_gen(Finalizer finalizer, Generator head, Generators... tail)
{
using Out = decltype(finalizer(head(std::declval<std::mt19937&>())));
std::vector<std::function<Out(std::mt19937&)>> gens{
transform_gen(finalizer, head),
transform_gen(finalizer, tail)...
};
return [=](std::mt19937& bit_gen)
{
std::uniform_int_distribution<int> distribution(0, gens.size() - 1);
return gens[distribution(bit_gen)](bit_gen);
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment