C++11 lambda 函数不接受类方法

标签 c++ c++11 lambda

我可能做错了什么。有人可以向我解释一下到底是什么吗?

在类 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/

相关文章:

c++ - 删除 *char[]

c++ - 为什么在以下情况下没有数据竞争?

Python 记录集中的多线程

c++ - 使用 `for(auto& e : cont)` 安全吗? vector<bool> 有什么问题?

Java双冒号运算符从编译时到字节码生成?

C++ Lambda 表达式 : Capture Clause vs Argument List; what is the crucial difference?

C++:指向释放内存空间的指针

c++ - OpenCV - 来自两个垂直 2D 图像的 3D 真实世界坐标

c++ - 引用与指针正交吗?

c++11 - 我应该怎么做才能将数据/值/对象添加到初始化列表,然后将其发送到构造函数?