當我看看std::exponential_distribution的文檔時,它似乎沒有公開在運行時更改lambda參數的標準方法。是否有文檔方式重置現有std :: exponential_distribution對象上的lambda參數?
有一個param
方法,但它需要的不透光件類型param_type
,而獲得這種類型的對象是調用param
不帶參數的唯一記載的方式,但是這將意味着一個不同的實例必須首先經過用該參數創建。
下面,我展示了兩個重新編譯lambda的非文檔化方法,但我不知道它們是否會在運行時導致正確的行爲。
#include <random>
#include <new>
int main(){
std::random_device rd;
std::mt19937 gen(rd());
std::exponential_distribution<double> intervalGenerator(5);
// How do we change lambda after creation?
// Construct a param_type using an undocumented constructor?
intervalGenerator.param(std::exponential_distribution<double>::param_type(7));
// Destroy and recreate the distribution?
intervalGenerator.~exponential_distribution();
new (&intervalGenerator) std::exponential_distribution<double>(9);
}
是否有文件的方式來做到這一點,如果沒有,要麼是兩種解決方案的安全使用?
這不是無證的。始終可以使用與父分發相同的參數構造'param_type'。 – Praetorian
@Praetorian,它的構造函數是否有文檔?我找不到任何東西。 – merlin2011
「param_type」可以使用與其分佈相同的參數構造的事實是「RandomNumberDistribution」概念(26.5.1.6/9)的要求之一。 – Fanael