3
最近,我正在寫一個基於策略類利用C++ 11的隨機數設施的。我希望能夠將stdlib隨機分佈作爲策略傳遞給我的類(特別是作爲模板模板參數)。爲了達到這個目的,我當然可以創建自己的RandomPolicy
類包裝器。但我懷疑我在做什麼是錯的。爲什麼隨機分佈不會將引擎作爲模板參數?
也就是說,它提出了以下問題:爲什麼不隨機分佈取發動機類型作爲模板參數?相反,我發現引擎將一個分佈作爲operator()的參數(而不是作爲模板參數)。 在代碼中,你可以這樣寫:
std::default_random_engine engine;
std::uniform_int_distribution<int> distribution(0, 9);
int n = distribution(engine);
在代碼中,我本來希望能夠寫:
當然,分佈則因而也必須採取種子爲一個參數(對其構造函數)。 當然,我在這裏忘記了一些問題/限制。 所以我想知道具體的原因是什麼,不把它作爲模板參數。
我懷疑這可能是因爲發行版不應該處理引擎的構建,但畢竟這不太可能,因爲引擎的構造函數除了種子(將被傳遞給發行版)。
啊,謝謝。我不知道你可以自由地讓引擎接受的不僅僅是種子參數。接受答案:)。 – Aleph 2013-04-27 20:23:59
它是否定義了爲了與標準分佈一起使用而需要放入課堂的內容?我知道它叫'操作符()'來獲取值,但有更多的東西需要使用 – Xymostech 2013-04-27 20:31:34
@Xymostech(或者甚至在標準中規定的?):是的,他們被稱爲_Uniform隨機數發生器requirements_ 。基本上它們是:1)typedef'result_type'(無符號整數); 2)'result_type operator()'; 3)'result_type min()'; 4)'result_type max()'。此外:'分鐘()'和'MAX()'是常數,'分鐘()
rodrigo
2013-04-27 21:16:08