#pragma once #include namespace engine { namespace detail { struct random_impl; } class random_number_generator { public: random_number_generator(); template random_number_generator(Provider const & p) : p_impl(std::make_shared(p)) {} template random_number_generator(std::shared_ptr const & p) : p_impl(p) {} unsigned int exclusive(unsigned int max) const; double exclusive(double min, double max) const; double inclusive(double min, double max) const; private: std::shared_ptr p_impl; }; }