#include <random>
#include <iostream>
template<typename T>
class Random
{
public:
Random(const T& min, const T& max)
: mUnifomDistribution(min, max)
{}
Random(const Random<T>&) = delete;
Random(const Random<T>&&) = delete;
Random<T>& operator = (const Random<T>&) = delete;
T operator()()
{
return mUnifomDistribution(mEngine);
}
private:
std::default_random_engine mEngine{ std::random_device()() }; // <-- here the doubt - is it seeding?
template <typename T>
static auto dist() -> typename std::enable_if<std::is_integral<T>::value, std::uniform_int_distribution<T>>::type;
template <typename T>
static auto dist() -> typename std::enable_if<std::is_floating_point<T>::value, std::uniform_real_distribution<T>>::type;
using type = decltype(dist<T>());
type mUnifomDistribution;
};
int main()
{
::Random<int> getRandom(0, 9);
for (int i = 0; i<9; ++i)
std::cout << getRandom() << '\n';
}
I2luY2x1ZGUgPHJhbmRvbT4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KY2xhc3MgUmFuZG9tCnsKcHVibGljOgogICAgUmFuZG9tKGNvbnN0IFQmIG1pbiwgY29uc3QgVCYgbWF4KQogICAgICAgIDogbVVuaWZvbURpc3RyaWJ1dGlvbihtaW4sIG1heCkKICAgIHt9CiAgICBSYW5kb20oY29uc3QgUmFuZG9tPFQ+JikgPSBkZWxldGU7CiAgICBSYW5kb20oY29uc3QgUmFuZG9tPFQ+JiYpID0gZGVsZXRlOwogICAgUmFuZG9tPFQ+JiBvcGVyYXRvciA9IChjb25zdCBSYW5kb208VD4mKSA9IGRlbGV0ZTsKICAgIFQgb3BlcmF0b3IoKSgpCiAgICB7CiAgICAgICAgcmV0dXJuIG1Vbmlmb21EaXN0cmlidXRpb24obUVuZ2luZSk7CiAgICB9Cgpwcml2YXRlOgogICAgc3RkOjpkZWZhdWx0X3JhbmRvbV9lbmdpbmUgbUVuZ2luZXsgc3RkOjpyYW5kb21fZGV2aWNlKCkoKSB9OyAvLyA8LS0gaGVyZSB0aGUgZG91YnQgLSBpcyBpdCBzZWVkaW5nPwogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICBzdGF0aWMgYXV0byBkaXN0KCkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUsIHN0ZDo6dW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uPFQ+Pjo6dHlwZTsKCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAgIHN0YXRpYyBhdXRvIGRpc3QoKSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2Zsb2F0aW5nX3BvaW50PFQ+Ojp2YWx1ZSwgc3RkOjp1bmlmb3JtX3JlYWxfZGlzdHJpYnV0aW9uPFQ+Pjo6dHlwZTsKICAgIHVzaW5nIHR5cGUgPSBkZWNsdHlwZShkaXN0PFQ+KCkpOwogICAgdHlwZSBtVW5pZm9tRGlzdHJpYnV0aW9uOwp9OwoKaW50IG1haW4oKSAKewogICAgOjpSYW5kb208aW50PiBnZXRSYW5kb20oMCwgOSk7CiAgICBmb3IgKGludCBpID0gMDsgaTw5OyArK2kpCiAgICAgICAgc3RkOjpjb3V0IDw8IGdldFJhbmRvbSgpIDw8ICdcbic7Cn0=