2017-10-01 2 views
0

マスタリングC++マルチスレッドと書かれたいくつかの例を説明しますが、私は完全に理解していないいくつかのコードを見つけました。乱数ジェネレータコールのC++パラメータの理解

この関数では、乱数ジェネレータラッパー関数はパラメータを理解していません。

int randGen(const int& min, const int& max){ 

    static thread_local mt19937 generator(hash<thread::id>() (this_thread::get_id())); 

    uniform_int_distribution<int> distribution(min, max); 

    return distribution(generator); 
} 

私は理解していないコードは、ジェネレータ関数の呼び出し

hash<thread::id>() (this_thread::get_id()) 

のパラメータはthis_thread::get_id()からの戻り値を取り込む機能hash<thread::id>()ですか?

何か助けていただければ幸いです。詳細情報を提供する必要があります。 plzはただ叫ぶ。

答えて

1

hash<thread::id>()std::hashクラステンプレートのオブジェクトを作成します。

次に、オブジェクトoperator()を呼び出し、引数としてthis_thread::get_id()を渡します。

hash<thread::id> my_hash; // Create object 
my_hash(this_thread::get_id()); // Use the function call operator 

最後、関数呼び出し演算子を使用して、それ同等の結果

my_hash.operator()(this_thread::get_id()); // Use the function call operator 

に:私たちはそれを分割した場合


、理解しやすいかもしれません関数呼び出し演算子は、generatorオブジェクトのコンストラクタへの引数として使用されます。

+0

これは(this_thread :: get_id())呼び出しによって返された値をハッシュしますか? –

+0

@DTurnerそれは正しいです。 –

+0

華麗な、絶対的なクラス、ありがとう、答えを今受け入れ、ありがとう。 –