构造函数中的lambda实例化

时间:2017-02-24 18:40:32

标签: c++ lambda constructor

我有这样的构造函数:

(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);
};

我该如何克服这个问题?

1 个答案:

答案 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)
{
    //...
}