Использовать его на данный момент можно, например, следующим образом:
#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, который не разрешает использовать аргументы по умолчанию в шаблонных функциях.
Здравствуйте, FrozenHeart, Вы писали:
FH>Здравствуйте.
FH>Имеется следующий код:
FH>[ccode]...
FH>Можно ли как-то избавиться от необходимости явно указывать тип передаваемых аргументов и воспользоваться type deduction? Проблема в том, что данный код необходимо компилировать, помимо всего прочего, в MSVC-11.0, который не разрешает использовать аргументы по умолчанию в шаблонных функциях.
Можно перенести параметры шаблона из типа класса в его operator()
При вызове функции компилятор делает автовывод.
А ти, москалику, вже приїхав (с)
Re[2]: MSVC-11.0 и type deduction в шаблонных функциях
Проблема в том, что данный код необходимо компилировать, помимо всего прочего, в MSVC-11.0, который не разрешает использовать аргументы по умолчанию в шаблонных функциях
Например, вышеприведённый код при попытке компиляции при помощи MSVC-11.0 выдаёт следующую ошибку:
error C4519: default template arguments are only allowed on a class template
Здравствуйте, FrozenHeart, Вы писали:
FH>В смысле? В стандарте так написано?
почитай реализацию используемой тобою стандартной библиотеки, и все встанет на места.
FH>И что можете предложить вместо этого?
создавай их в конструкторе твоего get_random_number.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: MSVC-11.0 и type deduction в шаблонных функциях
На мой взгляд параметризовать по типу движка особо смысла не имеет. Нужно просто определиться, какой генератор нужен. Mersenne twister — хороший выбор, если нужно реально МНОГО случайных чисел. Создавать движок имеет смысл статически, так как все твистеры Мерсенна, которые видел, использовали кэширование — генерировали числа пачками и отдавали по требованию. Для каждого типа из использованных распределений лучше создать свой враппер. Все они могут использовать один движок.
Т.е. вместо get_random_number лучше иметь get_uniform_random_number и т.п.
Re: MSVC-11.0 и type deduction в шаблонных функциях
Здравствуйте, FrozenHeart, Вы писали:
FH>Можно ли как-то избавиться от необходимости явно указывать тип передаваемых аргументов и воспользоваться type deduction?
да, можно, написав свободную шаблонную функцию. Класс здесь не нужен.
Re[2]: MSVC-11.0 и type deduction в шаблонных функциях
Проблема в том, что данный код необходимо компилировать, помимо всего прочего, в MSVC-11.0, который не разрешает использовать аргументы по умолчанию в шаблонных функциях
Например, вышеприведённый код при попытке компиляции при помощи MSVC-11.0 выдаёт следующую ошибку:
error C4519: default template arguments are only allowed on a class template
Здравствуйте, FrozenHeart, Вы писали: MTW>> Можно перенести параметры шаблона из типа класса в его operator() MTW>> При вызове функции компилятор делает автовывод. FH>Вы об этом?
Проблема в том, что данный код необходимо компилировать, помимо всего прочего, в MSVC-11.0, который не разрешает использовать аргументы по умолчанию в шаблонных функциях
FH>Например, вышеприведённый код при попытке компиляции при помощи MSVC-11.0 выдаёт следующую ошибку: FH>
error C4519: default template arguments are only allowed on a class template
Здравствуйте, MT-Wizard, Вы писали:
MW>P.S. И да, конструкторы генератора и девайса в msvc std очень даже тормозят
и в libstdc++, и в libc++ — т.е. везде, что неудивительно.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[5]: MSVC-11.0 и type deduction в шаблонных функциях
Здравствуйте, niXman, Вы писали:
X>Здравствуйте, MT-Wizard, Вы писали:
MW>>P.S. И да, конструкторы генератора и девайса в msvc std очень даже тормозят X>и в libstdc++, и в libc++ — т.е. везде, что неудивительно.
+1. Создание твистра в стеке каждый раз когда число нужно — абсурд.