gpt4 book ai didi

c++ - 构造函数中的 lambda 实例化

转载 作者:行者123 更新时间:2023-11-30 03:33:57 24 4
gpt4 key购买 nike

我有这样一个构造函数:

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 参数传递 lambda 函数时:

auto lambda = [](const std::pair<int, int>& x) {
return pair_hash(x);
};

我得到错误:

: In instantiation of ‘ConcurrentHashMap<K, V, Hash>::ConcurrentHashMap(int, int, const Hash&) [with K = std::pair<int, int>; V = std::__cxx11::basic_string<char>; Hash = Correctness_Constructors_Test::TestBody()::<lambda(const std::pair<int, int>&)>]’:
required from here

和:

error: use of deleted function ‘Correctness_Constructors_Test::TestBody()::<lambda(const std::pair<int, int>&)>::<lambda>()’

我怎样才能克服这个问题?

最佳答案

这里的问题是您在构造函数成员初始化列表中默认构造 my_hash_(因为您没有提供),然后在构造函数主体中分配给它。由于 my_hash_ 是一个 lambda,它不是默认可构造的,因为 lambda 不是默认可构造的。您需要在成员初始化列表中初始化 my_hash_

ConcurrentHashMap(int expected_size, int expected_threads_count, 
const Hash& hasher = Hash()) : my_hash_(hasher)
{
//...
}

关于c++ - 构造函数中的 lambda 实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42446036/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com