Могу ли я получить шаблонный генератор равномерного распределения, который будет работать для любого числового типа?

0

Вопрос говорит все. Я хочу что-то вроде этого:

template <typename T> 
void foo() {
    std::cout << "A random number: " << UniformDistribution<T>.get();
}

который работает, по крайней мере, для следующих типов: число (целые числа/с плавающей точкой, подписанные/неподписанные и реальные/сложные); перечисления; булевы. Я знаю о std :: uniform_int_distribution и std :: uniform_real_distribution. Я хочу что-то более шаблонное.

  • 0
    Вы можете попробовать специализировать оболочку с помощью предикатов, таких как is_integral , is_floating_point и т. Д. ... Это будет работать до тех пор, пока оно используется только со встроенными типами.
Теги:
templates
random
c++-standard-library

1 ответ

1

uniform_int_distribution и uniform_real_distribution ведут себя по-разному; первый распределяется на [a, b] для параметров a, b, а последний распределяется на [a, b). Кроме того, значения параметров по умолчанию различны; 0, numeric_limits<>::max() для первого и 0, 1 для последнего.

Когда вы решите, какое поведение вас интересует, вы можете написать его сами; для такого распределения было бы бессмысленным быть частью стандарта.

  • 0
    Я понимаю, что эти два не то же самое. Я спрашиваю, есть ли что-то стандартное / популярное, что люди используют. Не только для int и float - также для bools, enums и т. Д.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню