我可能做错了什么。有人可以向我解释一下到底是什么吗?
在类 SemanticNodeFactory 的某处,我有:
std::pair<C_ptr,R_ptr> Find( Token token )
{
C_ptr concept = nullptr;
R_ptr relation = nullptr;
//concept = concept_map->Find( token ); <- This works
//relation = relation_map->Find( token ); <- And this too
std::thread t1 ( [&concept,this] ( Token token ) { concept = concept_map->Find( token ); } );
std::thread t2 ( [&relation,this] ( Token token ) { relation = relation_map->Find( token ); } );
实际被调用的方法属于:
typedef std::shared_ptr<Relation> R_ptr;
typedef std::shared_ptr<Concept> C_ptr;
std::shared_ptr<SemanticGraph<Relation>> relation_map;
std::shared_ptr<SemanticGraph<Concept>> concept_map;
但是,编译器会提示:
error: no match for call to ‘(SemanticNodeFactory::Find(Token)::<lambda(Token)>) ()’
note: candidate is:
note: SemanticNodeFactory::Find(Token)::<lambda(Token)>
但是,我尝试调用的实际方法实际上是:
SemanticGraph<Relation>::Find(Token)
SemanticGraph<Concept>::Find(Token)
我做错了什么? 我正在通过引用捕获这个局部变量,但它似乎在提示实际的方法?
最佳答案
您给 std::thread
一个带有一个参数的函数对象——但是您没有给它任何要传递给这个参数的参数。你要么做
thread t1([...] () {...});
并捕获token
,或者做
thread t1([...] (Token) {...}, token);
并显式传递它。
关于C++11 lambda 函数不接受类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19579725/