2015-05-14 11 views
5

Aşağıda verilen kodda, yerel ayarını ve küresel ayarlarını kullanarak aynı etkiyi veren bir bayrağı (veya aynı derecede basit bir şey) uygulamak istiyorum (bu iki farklı sayıyı üreterek) örnek) ve yerel ayarın diğer zamanlarda kullanılması (bu örnekte iki aynı sayıyı vermek).C++ 11 RNG'nin başlangıç ​​durumu için yerel ve genel ayarlar arasında nasıl geçiş yapabilirim?

Açıkça "if" ve "geçiş" yapılarını başarılı olmadan denedim.

#include <iostream> 
#include <random> 

void print(); 

std::seed_seq seed{1, 2, 3, 4, 5}; 
std::mt19937 rng(seed); // *global* initial state 
std::uniform_real_distribution<> rand01(0, 1); 

int main() 
{ 
    print(); 
    print(); 

    return 0; 
} 

void print() 
{ 
    std::mt19937 rng(seed); // *local* initial state 
    std::cout << rand01(rng) << std::endl; 
} 
+0

Lütfen, * nasıl çalıştığınızı gösterir misiniz? 'if' veya' switch'? –

cevap

5

bir üçlü ve referansı kullanın: Burada

std::mt19937& ref = flag ? rng : local; 

, flag test etmek durumdur, rng "küresel" rastgele nesnedir ve local daha yerel biridir . bir Üçlü sonucu bir başvuru Bağlama

sözdizimsel geçerlidir: Bir if ifadesini kullanarak bunu yapamaz veya bu gibi benzer doğru tipte ifadeleri değildir.

Bu noktadan ref'u kullanın. Bu, rng ve local kapsamda kaldığı sürece geçerli olacaktır.

+0

teşekkürler @Bathsheba. – PeteL

İlgili konular