Здравствуйте.
Имеется следующий код:
template <
typename RangeType
, typename RngType = std::mt19937
, typename DistributionType = std::uniform_int_distribution<RangeType>
>
class get_random_number
{
public:
typename RngType::result_type operator()(RangeType range_start, RangeType range_end)
{
std::random_device rd;
RngType gen(rd());
DistributionType dist(range_start, range_end);
return dist(gen);
}
};
Использовать его на данный момент можно, например, следующим образом:
#include <iostream>
int main()
{
for (int i = 0; i < 50; ++i)
{
std::cout << get_random_number<int>()(0, 100) << '\n';
}
}
Можно ли как-то избавиться от необходимости явно указывать тип передаваемых аргументов и воспользоваться type deduction? Проблема в том, что данный код необходимо компилировать, помимо всего прочего, в MSVC-11.0, который не разрешает использовать аргументы по умолчанию в шаблонных функциях.