我正在编写一个程序,其中包含list<T>
,其中T
是int
或double
。我想要使用标题为<random>
的组件生成一个函数,该函数生成T
类型的数字。我无法找到以T
作为模板参数的发行版。生成T类型的随机数
的功能,然后会在通话中使用的generate
功能:
generate(myList.begin(), myList.end(), RandomGenerator())
我如何去这样做呢?
我试图创建一个名为RandomGenerator
的类,并为它重载operator()
。 当我尝试通过一个参数超载operator()
我得到一个错误。
函数调用,Random(b)
是int
参数b
一个函数对象:
generate(rList.begin(), rList.end(), Random(b));
代码超载()
,其中n
是有点“伪” -variable只是告诉它是什么类型:
int operator()(int n)
{
std::uniform_int_distribution<int> dist(1000, 2000);
return dist(gen);
}
错误消息:
Error 2 error C2440: '<function-style-cast>' : cannot convert from 'int' to 'Random'
Error 3 error C2780: 'void std::generate(_FwdIt,_FwdIt,_Fn0)' : expects 3 arguments - 2 provided
你试过了什么? (提示:你需要重载函数) – texasbruce 2014-10-06 14:01:12
我想你可能会发现['std :: conditional'](http://en.cppreference.com/w/cpp/types/conditional)和type-class测试如['std :: is_floating_point'](http://en.cppreference.com/w/cpp/types/is_floating_point)和['std :: is_integral'](http://en.cppreference.com/ w/cpp/types/is_integral)在这项工作中很有用。 – WhozCraig 2014-10-06 14:36:36
你声称用三个参数调用'generate' - 但编译器说你只通过了两个参数。这强烈建议您显示的代码不是您实际编译的代码。显示错误消息引用的确切行。 – 2014-10-06 14:39:43