我有这样的构造函数:
(function(app) {
// ...
})(app = app || {});
当我为app
参数传递lambda函数时:
ConcurrentHashMap(int expected_size, int expected_threads_count, const Hash& hasher = Hash())
{
this->my_hash_ = hasher;
if (expected_size != kUndefinedSize)
table.reserve(expected_size);
}
我收到了错误:
hasher
和
auto lambda = [](const std::pair<int, int>& x) {
return pair_hash(x);
};
我该如何克服这个问题?
答案 0 :(得分:2)
这里的问题是你的构造函数成员初始化列表中的默认构造my_hash_
(因为你没有提供),然后你在构造函数体中分配它。由于my_hash_
是一个lambda,因此它不是默认构造的,因为lambdas不是默认构造的。您需要在成员初始化列表中初始化my_hash_
,如
ConcurrentHashMap(int expected_size, int expected_threads_count,
const Hash& hasher = Hash()) : my_hash_(hasher)
{
//...
}