Вопрос говорит все. Я хочу что-то вроде этого:
template <typename T>
void foo() {
std::cout << "A random number: " << UniformDistribution<T>.get();
}
который работает, по крайней мере, для следующих типов: число (целые числа/с плавающей точкой, подписанные/неподписанные и реальные/сложные); перечисления; булевы. Я знаю о std :: uniform_int_distribution и std :: uniform_real_distribution. Я хочу что-то более шаблонное.
uniform_int_distribution
и uniform_real_distribution
ведут себя по-разному; первый распределяется на [a, b]
для параметров a, b, а последний распределяется на [a, b)
. Кроме того, значения параметров по умолчанию различны; 0, numeric_limits<>::max()
для первого и 0, 1
для последнего.
Когда вы решите, какое поведение вас интересует, вы можете написать его сами; для такого распределения было бы бессмысленным быть частью стандарта.
is_integral
,is_floating_point
и т. Д. ... Это будет работать до тех пор, пока оно используется только со встроенными типами.