我正在編寫一個程序,其中包含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