MSVC-11.0 и type deduction в шаблонных функциях
От: FrozenHeart  
Дата: 19.02.14 18:20
Оценка:
Здравствуйте.

Имеется следующий код:

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, который не разрешает использовать аргументы по умолчанию в шаблонных функциях.
avalon/1.0.434
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.