错误是:
参数4从'const ServerLogInfo'到'ServerLogInfo&'的未知转换
int AsyncParseInternal(const std::string& data, DictEntry* entries, int num_dense, ServerLogInfo& serverlog, time_t timestamp)
{
auto func = [this, data, entries, num_dense, serverlog, timestamp]() {
this->ParseInternal(data, entries, num_dense, serverlog, timestamp);
};
util::ThreadCaller::call_method(std::move(func));
return 0;
}
int ParseInternal(
const std::string& data, DictEntry* entries, int num_dense, ServerLogInfo& serverlog, time_t timestamp)
{
...
}
void f(int&) {}
struct S {
void operator()() const { f(x); }
int x;
};
由于operator()
被标记为const
,因此无法编译。 C ++ lambda是带有operator()
且隐式标记为const
的函数对象。为了获得非
const
operator()
,您需要标记λmutable
。即,
auto func = [...]() mutable { ... }; ^^^^^^^
operator()
为const
限定,并且捕获的对象也被视为const
;那么您不能将它们传递给像ServerLogInfo&
这样的非const的左值引用,除非用mutable
声明lambda。