5

main()簡単に言えば、私の質問は次のようになります:エンジンを引数として渡さずに、別の関数から初期化されたランダムエンジンにアクセスするにはどうすればよいですか?

プログラムでランダムエンジンを1回だけ初期化するのは良い習慣だと読みました。main()関数の最初に次のようにします。

#include <iostream>
#include <random>
#include <ctime>

using std::cout;
using std::endl;
using std::default_random_engine; 
using std::uniform_int_distribution;

int main() {
  int seed = time(0);
  default_random_engine engine(seed);              
  uniform_int_distribution<int> dist(0,100); 
  cout << "Random num: " << engine(dist) << endl;
}

しかし、他の機能からアクセスできるようにするにはどうすればよいでしょうか? func_aたとえば、関数が呼び出すネストされた構造でfunc_bは、エンジンによって生成された乱数で何かを行うことになっています。例えば:

#include <iostream>
#include <random>
#include <ctime>

using std::cout;
using std::endl;
using std::default_random_engine; 
using std::uniform_int_distribution;

void func_b() {
  // do sth
  cout << "Print a random number: " << endl;
}

void func_a() {
  func_b();
}

int main() {
  int seed = time(0);
  default_random_engine engine(seed);              
  uniform_int_distribution<int> dist(0,100); 
  func_a();
}

編集:問題は解決しました、ありがとう。

#include <iostream>
#include <random>
#include <ctime>


using std::cout;
using std::endl;
using std::default_random_engine; 
using std::uniform_int_distribution;

////////////////////////
// GLOBAL VARIABLES
////////////////////////

int seed = time(0);
default_random_engine engine(seed);

////////////////////////
// FUNCTION DEFINITIONS
////////////////////////

void func_b() {
  uniform_int_distribution<int> dist(0,100);
  cout << dist(engine) << endl;
}

void func_a() {
  func_b();
}

int main() {
  int seed = time(0);
  default_random_engine engine(seed);              
  uniform_int_distribution<int> dist(0,100); 
  func_a();
}
4

1 に答える 1