#pragma once #include #include namespace base { template class UniformRandom { static_assert(std::is_integral::value); std::random_device m_rd; std::mt19937 m_gen; using distribution_int_type = std::conditional_t, short, unsigned short>>; std::uniform_int_distribution m_distr; public: UniformRandom(T min, T max) : m_gen(m_rd()), m_distr(min, max) {} UniformRandom() : UniformRandom(std::numeric_limits::min(), std::numeric_limits::max()) {} T operator()() { return static_cast(m_distr(m_gen)); } }; } // namespace base