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

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

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

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


person einpoklum    schedule 20.11.2013    source источник
comment
Вы можете попробовать специализировать оболочку с такими предикатами, как is_integral, is_floating_point и т. д. Это будет работать, если оно используется только со встроенными типами.   -  person defube    schedule 20.11.2013


Ответы (1)


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

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

person ecatmur    schedule 20.11.2013
comment
Я понимаю, что это не одно и то же. Я спрашиваю, есть ли что-то стандартное / популярное, что люди используют. Не только для int и float, но и для логических значений, перечислений и т. д. - person einpoklum; 20.11.2013