我正在阅读一本名为掌握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()
的返回值吗?
如果我需要提供更多信息,我们将不胜感激。请大声喊道。
答案 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
对象的构造函数的参数。