如何使用传递给 lambda 的“this”指针作为 lambda 中的函数参数?

How to use 'this' pointer passed to a lambda as a function argument within a lambda?

提问人:query 提问时间:12/4/2022 最后编辑:query 更新时间:12/4/2022 访问量:23

问:

我正在使用 VS 2019 (C++20)。

我无法编译使用 std::visit 和 std::variant 和函数重载的代码。编译器报告错误“Function Visit does not take one argument”。显然,问题出在“这个”论点上,但我无法弄清楚哪里出了问题。

class MyObj
{
public:
   void Visit(MyClass& arg) {};
};

void MyClass::Accept(std::variant<MyObj> arg)
{
   std::visit(
      overload{ 
            [=, this](MyObj& target) {target.Visit(*this);}
                  },  arg);
}

我错过了什么?

visual-c++ lambda 标准

评论

0赞 heap underrun 12/4/2022
请提供一个最小的可重现示例,以便我们可以复制粘贴您的代码并对其进行编译。

答:

0赞 query 12/4/2022 #1

问题出在包含的头文件上。虽然 VS IDE 很好,但编译器需要 MyClass 的“extern”声明。