Re[3]: MSVC-11.0 и type deduction в шаблонных функциях
От: k.o. Россия  
Дата: 20.02.14 05:49
Оценка: +1
Здравствуйте, FrozenHeart, Вы писали:

MTW>> Можно перенести параметры шаблона из типа класса в его operator()

MTW>> При вызове функции компилятор делает автовывод.

FH>Вы об этом?

  Скрытый текст
FH>
FH>class get_random_number
FH>{
FH>public:
FH>  template <
FH>    typename RangeType
FH>    , typename RngType = std::mt19937
FH>    , typename DistributionType = std::uniform_int_distribution<RangeType>
  >>
FH>  typename RngType::result_type operator()(RangeType range_start, RangeType range_end)
FH>  {
FH>    std::random_device rd;
FH>    RngType gen(rd());
FH>    DistributionType dist(range_start, range_end);
FH>    return dist(gen);
FH>  }
FH>};
FH>

FH>Если да, то я же сказал:

FH>

Проблема в том, что данный код необходимо компилировать, помимо всего прочего, в MSVC-11.0, который не разрешает использовать аргументы по умолчанию в шаблонных функциях



FH>Например, вышеприведённый код при попытке компиляции при помощи MSVC-11.0 выдаёт следующую ошибку:


FH>

error C4519: default template arguments are only allowed on a class template



template <
    typename RngType = std::mt19937
    , template<class> class DistributionType = std::uniform_int_distribution
>
class get_random_number
{
public:
  template <typename RangeType>
  typename RngType::result_type operator()(RangeType range_start, RangeType range_end)
  {
    std::random_device rd;
    RngType gen(rd());
    DistributionType<RangeType> dist(range_start, range_end);
    return dist(gen);
  }
};
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.