在lambda中使用静态方法时出错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在lambda中使用静态方法时出错相关的知识,希望对你有一定的参考价值。

我在static有一个my_method_1()方法my_class,我试图在lambda中使用它:

static void my_method_1(el);

void my_class::my_method_2()
{
    std::for_each(my_list_.begin(), my_list_.end(),
        [](auto& element)
        {
            my_method_1(element);
        });
}

gcc6给了我一个错误:

这个lambda函数没有捕获'this'

在gcc4中,它编译。

答案

无法重现。

根据错误(“错误:'这个'没有捕获这个lambda函数'”)my_method_1()不是static

如果my_method_1()是一个非静态方法,你可以在lambda中使用它来捕获this的值(就像通过引用捕获对象一样);就像是

 //  v <- capture by value 
    [=](auto& element)
     { my_method_1(element); }

如果my_method_1()真的是static方法,请准备一个最小但完整的例子来重现你的问题。

另一答案

2观察:

  1. 你的功能是静态的,你可以称之为my_class::my_method_1()
  2. 你不需要在这里使用lambda,你试过这个吗? void my_class::my_method_2() { for (auto& element : my_list) my_method_1(element); }

以上是关于在lambda中使用静态方法时出错的主要内容,如果未能解决你的问题,请参考以下文章

Android:在drawerlayout中使用地图膨胀片段时出错

在我的“设置”片段中膨胀类 PreferenceScreen 时出错

使用片段从数据库 SQLite 获取数据时出错

第二次在对话框中膨胀片段时出错

在 java 1.8 中使用 lambda 时出错

lambda 表达式与静态方法