了解随机数生成器调用中的C ++参数

时间:2017-10-01 23:21:05

标签: c++ multithreading hash parameters

我正在阅读一本名为掌握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())

hash<thread::id>()是一个函数,它接受this_thread::get_id()的返回值吗?

如果我需要提供更多信息,我们将不胜感激。请大声喊道。

1 个答案:

答案 0 :(得分: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对象的构造函数的参数。